From eee79e31da02be418771623349e36234aecd1718 Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:28:54 +0100 Subject: [PATCH 1/5] auto-claude: subtask-1-1 - Remove eslintignore reference to locales-old --- .eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index 7e42161..fd71c77 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,7 +4,6 @@ src/pages-vite/ src/hooks/ src/services/ src/utils/ -src/i18n/locales-old/ *.bak # Build output From 9baffe94057bcdfe7b2612816926ae82e2c0c9b4 Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:29:48 +0100 Subject: [PATCH 2/5] auto-claude: subtask-1-2 - Delete src/i18n/locales-old directory with all 135 --- .auto-claude-security.json | 227 ++++++++++++++++ .auto-claude-status | 25 ++ .claude_settings.json | 39 +++ .gitignore | 5 +- src/i18n/locales-old/de/blog/index.ts | 175 ------------ .../blog/posts/erp-integration-breuninger.ts | 138 ---------- .../fullstack-development-timetracking.ts | 253 ------------------ .../de/blog/posts/rfid-automation.ts | 204 -------------- src/i18n/locales-old/de/common.ts | 99 ------- src/i18n/locales-old/de/cookiebanner.ts | 14 - src/i18n/locales-old/de/faq.ts | 37 --- src/i18n/locales-old/de/footer.ts | 41 --- src/i18n/locales-old/de/index.ts | 119 -------- src/i18n/locales-old/de/meta.ts | 195 -------------- src/i18n/locales-old/de/navigation.ts | 79 ------ src/i18n/locales-old/de/pages/about/hero.ts | 33 --- src/i18n/locales-old/de/pages/about/index.ts | 28 -- .../locales-old/de/pages/about/journey.ts | 95 ------- src/i18n/locales-old/de/pages/about/schema.ts | 31 --- .../locales-old/de/pages/about/skillbar.ts | 13 - .../locales-old/de/pages/about/skillgroup.ts | 63 ----- src/i18n/locales-old/de/pages/about/skills.ts | 46 ---- .../locales-old/de/pages/about/workflow.ts | 44 --- .../de/pages/contact/contactform.ts | 39 --- .../de/pages/contact/contactinfo.ts | 25 -- .../locales-old/de/pages/contact/index.ts | 71 ----- src/i18n/locales-old/de/pages/dashboard.ts | 76 ------ src/i18n/locales-old/de/pages/home/about.ts | 15 -- .../locales-old/de/pages/home/experience.ts | 86 ------ .../locales-old/de/pages/home/expertise.ts | 27 -- src/i18n/locales-old/de/pages/home/hero.ts | 32 --- src/i18n/locales-old/de/pages/home/index.ts | 18 -- .../locales-old/de/pages/home/projects.ts | 10 - src/i18n/locales-old/de/pages/home/skills.ts | 41 --- src/i18n/locales-old/de/pages/login.ts | 54 ---- src/i18n/locales-old/de/pages/notfound.ts | 19 -- src/i18n/locales-old/de/pages/portfolio.ts | 117 -------- src/i18n/locales-old/de/pages/privacy.ts | 96 ------- src/i18n/locales-old/de/pages/terms.ts | 59 ---- src/i18n/locales-old/de/portfolio/index.ts | 70 ----- .../de/portfolio/projects/ai-data-reader.ts | 107 -------- .../portfolio/projects/ai-music-production.ts | 114 -------- .../projects/automated-ad-creatives.ts | 95 ------- .../de/portfolio/projects/cursor-ide.ts | 89 ------ .../de/portfolio/projects/kamenpro.ts | 135 ---------- .../projects/power-platform-governance.ts | 244 ----------------- .../de/portfolio/projects/smart-warehouse.ts | 222 --------------- .../de/portfolio/projects/website-mit-ki.ts | 80 ------ src/i18n/locales-old/de/seo-content.ts | 104 ------- src/i18n/locales-old/en/blog/index.ts | 175 ------------ .../blog/posts/erp-integration-breuninger.ts | 138 ---------- .../fullstack-development-timetracking.ts | 253 ------------------ .../en/blog/posts/rfid-automation.ts | 204 -------------- src/i18n/locales-old/en/common.ts | 99 ------- src/i18n/locales-old/en/cookiebanner.ts | 14 - src/i18n/locales-old/en/faq.ts | 37 --- src/i18n/locales-old/en/footer.ts | 41 --- src/i18n/locales-old/en/index.ts | 119 -------- src/i18n/locales-old/en/meta.ts | 193 ------------- src/i18n/locales-old/en/navigation.ts | 79 ------ src/i18n/locales-old/en/pages/about/hero.ts | 33 --- src/i18n/locales-old/en/pages/about/index.ts | 28 -- .../locales-old/en/pages/about/journey.ts | 95 ------- src/i18n/locales-old/en/pages/about/schema.ts | 31 --- .../locales-old/en/pages/about/skillbar.ts | 13 - .../locales-old/en/pages/about/skillgroup.ts | 63 ----- src/i18n/locales-old/en/pages/about/skills.ts | 46 ---- .../locales-old/en/pages/about/workflow.ts | 44 --- .../en/pages/contact/contactform.ts | 41 --- .../en/pages/contact/contactinfo.ts | 27 -- .../locales-old/en/pages/contact/index.ts | 71 ----- src/i18n/locales-old/en/pages/dashboard.ts | 76 ------ src/i18n/locales-old/en/pages/home/about.ts | 13 - .../locales-old/en/pages/home/experience.ts | 86 ------ .../locales-old/en/pages/home/expertise.ts | 27 -- src/i18n/locales-old/en/pages/home/hero.ts | 31 --- src/i18n/locales-old/en/pages/home/index.ts | 25 -- .../locales-old/en/pages/home/projects.ts | 10 - src/i18n/locales-old/en/pages/home/skills.ts | 41 --- src/i18n/locales-old/en/pages/login.ts | 54 ---- src/i18n/locales-old/en/pages/notfound.ts | 19 -- src/i18n/locales-old/en/pages/portfolio.ts | 117 -------- src/i18n/locales-old/en/pages/privacy.ts | 96 ------- src/i18n/locales-old/en/pages/terms.ts | 59 ---- src/i18n/locales-old/en/portfolio/index.ts | 70 ----- .../en/portfolio/projects/ai-data-reader.ts | 107 -------- .../portfolio/projects/ai-music-production.ts | 114 -------- .../projects/automated-ad-creatives.ts | 95 ------- .../en/portfolio/projects/cursor-ide.ts | 89 ------ .../en/portfolio/projects/kamenpro.ts | 135 ---------- .../projects/power-platform-governance.ts | 244 ----------------- .../en/portfolio/projects/smart-warehouse.ts | 222 --------------- .../en/portfolio/projects/website-mit-ki.ts | 80 ------ src/i18n/locales-old/en/seo-content.ts | 100 ------- src/i18n/locales-old/sr/blog/index.ts | 175 ------------ .../blog/posts/erp-integration-breuninger.ts | 138 ---------- .../fullstack-development-timetracking.ts | 253 ------------------ .../sr/blog/posts/rfid-automation.ts | 204 -------------- src/i18n/locales-old/sr/common.ts | 99 ------- src/i18n/locales-old/sr/cookiebanner.ts | 14 - src/i18n/locales-old/sr/faq.ts | 37 --- src/i18n/locales-old/sr/footer.ts | 41 --- src/i18n/locales-old/sr/index.ts | 119 -------- src/i18n/locales-old/sr/meta.ts | 101 ------- src/i18n/locales-old/sr/navigation.ts | 79 ------ src/i18n/locales-old/sr/pages/about/hero.ts | 33 --- src/i18n/locales-old/sr/pages/about/index.ts | 28 -- .../locales-old/sr/pages/about/journey.ts | 96 ------- src/i18n/locales-old/sr/pages/about/schema.ts | 31 --- .../locales-old/sr/pages/about/skillbar.ts | 13 - .../locales-old/sr/pages/about/skillgroup.ts | 63 ----- src/i18n/locales-old/sr/pages/about/skills.ts | 46 ---- .../locales-old/sr/pages/about/workflow.ts | 44 --- .../sr/pages/contact/contactform.ts | 41 --- .../sr/pages/contact/contactinfo.ts | 27 -- .../locales-old/sr/pages/contact/index.ts | 71 ----- src/i18n/locales-old/sr/pages/dashboard.ts | 76 ------ src/i18n/locales-old/sr/pages/home/about.ts | 13 - .../locales-old/sr/pages/home/experience.ts | 86 ------ .../locales-old/sr/pages/home/expertise.ts | 27 -- src/i18n/locales-old/sr/pages/home/hero.ts | 31 --- src/i18n/locales-old/sr/pages/home/index.ts | 25 -- .../locales-old/sr/pages/home/projects.ts | 10 - src/i18n/locales-old/sr/pages/home/skills.ts | 41 --- src/i18n/locales-old/sr/pages/login.ts | 54 ---- src/i18n/locales-old/sr/pages/notfound.ts | 19 -- src/i18n/locales-old/sr/pages/portfolio.ts | 117 -------- src/i18n/locales-old/sr/pages/privacy.ts | 96 ------- src/i18n/locales-old/sr/pages/terms.ts | 59 ---- src/i18n/locales-old/sr/portfolio/index.ts | 70 ----- .../sr/portfolio/projects/ai-data-reader.ts | 107 -------- .../portfolio/projects/ai-music-production.ts | 114 -------- .../projects/automated-ad-creatives.ts | 95 ------- .../sr/portfolio/projects/cursor-ide.ts | 89 ------ .../sr/portfolio/projects/kamenpro.ts | 135 ---------- .../projects/power-platform-governance.ts | 244 ----------------- .../sr/portfolio/projects/smart-warehouse.ts | 222 --------------- .../sr/portfolio/projects/website-mit-ki.ts | 80 ------ src/i18n/locales-old/sr/seo-content.ts | 94 ------- 139 files changed, 295 insertions(+), 11164 deletions(-) create mode 100644 .auto-claude-security.json create mode 100644 .auto-claude-status create mode 100644 .claude_settings.json delete mode 100644 src/i18n/locales-old/de/blog/index.ts delete mode 100644 src/i18n/locales-old/de/blog/posts/erp-integration-breuninger.ts delete mode 100644 src/i18n/locales-old/de/blog/posts/fullstack-development-timetracking.ts delete mode 100644 src/i18n/locales-old/de/blog/posts/rfid-automation.ts delete mode 100644 src/i18n/locales-old/de/common.ts delete mode 100644 src/i18n/locales-old/de/cookiebanner.ts delete mode 100644 src/i18n/locales-old/de/faq.ts delete mode 100644 src/i18n/locales-old/de/footer.ts delete mode 100644 src/i18n/locales-old/de/index.ts delete mode 100644 src/i18n/locales-old/de/meta.ts delete mode 100644 src/i18n/locales-old/de/navigation.ts delete mode 100644 src/i18n/locales-old/de/pages/about/hero.ts delete mode 100644 src/i18n/locales-old/de/pages/about/index.ts delete mode 100644 src/i18n/locales-old/de/pages/about/journey.ts delete mode 100644 src/i18n/locales-old/de/pages/about/schema.ts delete mode 100644 src/i18n/locales-old/de/pages/about/skillbar.ts delete mode 100644 src/i18n/locales-old/de/pages/about/skillgroup.ts delete mode 100644 src/i18n/locales-old/de/pages/about/skills.ts delete mode 100644 src/i18n/locales-old/de/pages/about/workflow.ts delete mode 100644 src/i18n/locales-old/de/pages/contact/contactform.ts delete mode 100644 src/i18n/locales-old/de/pages/contact/contactinfo.ts delete mode 100644 src/i18n/locales-old/de/pages/contact/index.ts delete mode 100644 src/i18n/locales-old/de/pages/dashboard.ts delete mode 100644 src/i18n/locales-old/de/pages/home/about.ts delete mode 100644 src/i18n/locales-old/de/pages/home/experience.ts delete mode 100644 src/i18n/locales-old/de/pages/home/expertise.ts delete mode 100644 src/i18n/locales-old/de/pages/home/hero.ts delete mode 100644 src/i18n/locales-old/de/pages/home/index.ts delete mode 100644 src/i18n/locales-old/de/pages/home/projects.ts delete mode 100644 src/i18n/locales-old/de/pages/home/skills.ts delete mode 100644 src/i18n/locales-old/de/pages/login.ts delete mode 100644 src/i18n/locales-old/de/pages/notfound.ts delete mode 100644 src/i18n/locales-old/de/pages/portfolio.ts delete mode 100644 src/i18n/locales-old/de/pages/privacy.ts delete mode 100644 src/i18n/locales-old/de/pages/terms.ts delete mode 100644 src/i18n/locales-old/de/portfolio/index.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/ai-data-reader.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/ai-music-production.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/automated-ad-creatives.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/cursor-ide.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/kamenpro.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/power-platform-governance.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/smart-warehouse.ts delete mode 100644 src/i18n/locales-old/de/portfolio/projects/website-mit-ki.ts delete mode 100644 src/i18n/locales-old/de/seo-content.ts delete mode 100644 src/i18n/locales-old/en/blog/index.ts delete mode 100644 src/i18n/locales-old/en/blog/posts/erp-integration-breuninger.ts delete mode 100644 src/i18n/locales-old/en/blog/posts/fullstack-development-timetracking.ts delete mode 100644 src/i18n/locales-old/en/blog/posts/rfid-automation.ts delete mode 100644 src/i18n/locales-old/en/common.ts delete mode 100644 src/i18n/locales-old/en/cookiebanner.ts delete mode 100644 src/i18n/locales-old/en/faq.ts delete mode 100644 src/i18n/locales-old/en/footer.ts delete mode 100644 src/i18n/locales-old/en/index.ts delete mode 100644 src/i18n/locales-old/en/meta.ts delete mode 100644 src/i18n/locales-old/en/navigation.ts delete mode 100644 src/i18n/locales-old/en/pages/about/hero.ts delete mode 100644 src/i18n/locales-old/en/pages/about/index.ts delete mode 100644 src/i18n/locales-old/en/pages/about/journey.ts delete mode 100644 src/i18n/locales-old/en/pages/about/schema.ts delete mode 100644 src/i18n/locales-old/en/pages/about/skillbar.ts delete mode 100644 src/i18n/locales-old/en/pages/about/skillgroup.ts delete mode 100644 src/i18n/locales-old/en/pages/about/skills.ts delete mode 100644 src/i18n/locales-old/en/pages/about/workflow.ts delete mode 100644 src/i18n/locales-old/en/pages/contact/contactform.ts delete mode 100644 src/i18n/locales-old/en/pages/contact/contactinfo.ts delete mode 100644 src/i18n/locales-old/en/pages/contact/index.ts delete mode 100644 src/i18n/locales-old/en/pages/dashboard.ts delete mode 100644 src/i18n/locales-old/en/pages/home/about.ts delete mode 100644 src/i18n/locales-old/en/pages/home/experience.ts delete mode 100644 src/i18n/locales-old/en/pages/home/expertise.ts delete mode 100644 src/i18n/locales-old/en/pages/home/hero.ts delete mode 100644 src/i18n/locales-old/en/pages/home/index.ts delete mode 100644 src/i18n/locales-old/en/pages/home/projects.ts delete mode 100644 src/i18n/locales-old/en/pages/home/skills.ts delete mode 100644 src/i18n/locales-old/en/pages/login.ts delete mode 100644 src/i18n/locales-old/en/pages/notfound.ts delete mode 100644 src/i18n/locales-old/en/pages/portfolio.ts delete mode 100644 src/i18n/locales-old/en/pages/privacy.ts delete mode 100644 src/i18n/locales-old/en/pages/terms.ts delete mode 100644 src/i18n/locales-old/en/portfolio/index.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/ai-data-reader.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/ai-music-production.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/automated-ad-creatives.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/cursor-ide.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/kamenpro.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/power-platform-governance.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/smart-warehouse.ts delete mode 100644 src/i18n/locales-old/en/portfolio/projects/website-mit-ki.ts delete mode 100644 src/i18n/locales-old/en/seo-content.ts delete mode 100644 src/i18n/locales-old/sr/blog/index.ts delete mode 100644 src/i18n/locales-old/sr/blog/posts/erp-integration-breuninger.ts delete mode 100644 src/i18n/locales-old/sr/blog/posts/fullstack-development-timetracking.ts delete mode 100644 src/i18n/locales-old/sr/blog/posts/rfid-automation.ts delete mode 100644 src/i18n/locales-old/sr/common.ts delete mode 100644 src/i18n/locales-old/sr/cookiebanner.ts delete mode 100644 src/i18n/locales-old/sr/faq.ts delete mode 100644 src/i18n/locales-old/sr/footer.ts delete mode 100644 src/i18n/locales-old/sr/index.ts delete mode 100644 src/i18n/locales-old/sr/meta.ts delete mode 100644 src/i18n/locales-old/sr/navigation.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/hero.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/index.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/journey.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/schema.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/skillbar.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/skillgroup.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/skills.ts delete mode 100644 src/i18n/locales-old/sr/pages/about/workflow.ts delete mode 100644 src/i18n/locales-old/sr/pages/contact/contactform.ts delete mode 100644 src/i18n/locales-old/sr/pages/contact/contactinfo.ts delete mode 100644 src/i18n/locales-old/sr/pages/contact/index.ts delete mode 100644 src/i18n/locales-old/sr/pages/dashboard.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/about.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/experience.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/expertise.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/hero.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/index.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/projects.ts delete mode 100644 src/i18n/locales-old/sr/pages/home/skills.ts delete mode 100644 src/i18n/locales-old/sr/pages/login.ts delete mode 100644 src/i18n/locales-old/sr/pages/notfound.ts delete mode 100644 src/i18n/locales-old/sr/pages/portfolio.ts delete mode 100644 src/i18n/locales-old/sr/pages/privacy.ts delete mode 100644 src/i18n/locales-old/sr/pages/terms.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/index.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/ai-data-reader.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/ai-music-production.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/automated-ad-creatives.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/cursor-ide.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/kamenpro.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/power-platform-governance.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/smart-warehouse.ts delete mode 100644 src/i18n/locales-old/sr/portfolio/projects/website-mit-ki.ts delete mode 100644 src/i18n/locales-old/sr/seo-content.ts diff --git a/.auto-claude-security.json b/.auto-claude-security.json new file mode 100644 index 0000000..eed60a2 --- /dev/null +++ b/.auto-claude-security.json @@ -0,0 +1,227 @@ +{ + "base_commands": [ + ".", + "[", + "[[", + "ag", + "awk", + "basename", + "bash", + "bc", + "break", + "cat", + "cd", + "chmod", + "clear", + "cmp", + "column", + "comm", + "command", + "continue", + "cp", + "curl", + "cut", + "date", + "df", + "diff", + "dig", + "dirname", + "du", + "echo", + "egrep", + "env", + "eval", + "exec", + "exit", + "expand", + "export", + "expr", + "false", + "fd", + "fgrep", + "file", + "find", + "fmt", + "fold", + "gawk", + "gh", + "git", + "grep", + "gunzip", + "gzip", + "head", + "help", + "host", + "iconv", + "id", + "jobs", + "join", + "jq", + "kill", + "killall", + "less", + "let", + "ln", + "ls", + "lsof", + "man", + "mkdir", + "mktemp", + "more", + "mv", + "nl", + "paste", + "pgrep", + "ping", + "pkill", + "popd", + "printenv", + "printf", + "ps", + "pushd", + "pwd", + "read", + "readlink", + "realpath", + "reset", + "return", + "rev", + "rg", + "rm", + "rmdir", + "sed", + "seq", + "set", + "sh", + "shuf", + "sleep", + "sort", + "source", + "split", + "stat", + "tail", + "tar", + "tee", + "test", + "time", + "timeout", + "touch", + "tr", + "tree", + "true", + "type", + "uname", + "unexpand", + "uniq", + "unset", + "unzip", + "watch", + "wc", + "wget", + "whereis", + "which", + "whoami", + "xargs", + "yes", + "yq", + "zip", + "zsh" + ], + "stack_commands": [ + "ar", + "clang", + "clang++", + "cmake", + "composer", + "dive", + "docker", + "docker-buildx", + "docker-compose", + "dockerfile", + "eslint", + "g++", + "gcc", + "ipython", + "jupyter", + "ld", + "make", + "meson", + "next", + "ninja", + "nm", + "node", + "notebook", + "npm", + "npx", + "objdump", + "pdb", + "php", + "pip", + "pip3", + "pipx", + "pnpm", + "pnpx", + "pudb", + "python", + "python3", + "react-scripts", + "strip", + "ts-node", + "tsc", + "tsx", + "vitest" + ], + "script_commands": [ + "bun", + "npm", + "pnpm", + "yarn" + ], + "custom_commands": [], + "detected_stack": { + "languages": [ + "python", + "javascript", + "typescript", + "php", + "c" + ], + "package_managers": [ + "pnpm" + ], + "frameworks": [ + "nextjs", + "react", + "vitest", + "eslint" + ], + "databases": [], + "infrastructure": [ + "docker" + ], + "cloud_providers": [], + "code_quality_tools": [], + "version_managers": [] + }, + "custom_scripts": { + "npm_scripts": [ + "dev", + "build", + "start", + "lint", + "build:images", + "generate:images", + "generate:images:dry", + "test", + "test:coverage" + ], + "make_targets": [], + "poetry_scripts": [], + "cargo_aliases": [], + "shell_scripts": [] + }, + "project_dir": "C:\\Users\\damja\\WebstormProjects\\Portfolio", + "created_at": "2026-01-22T15:28:38.237190", + "project_hash": "c4ad399e16be367eb4e6b076fe1d9ee3", + "inherited_from": "C:\\Users\\damja\\WebstormProjects\\Portfolio" +} \ No newline at end of file diff --git a/.auto-claude-status b/.auto-claude-status new file mode 100644 index 0000000..da3bbdf --- /dev/null +++ b/.auto-claude-status @@ -0,0 +1,25 @@ +{ + "active": true, + "spec": "028-remove-dead-code-locales-old-folder-with-100-unuse", + "state": "building", + "subtasks": { + "completed": 1, + "total": 5, + "in_progress": 1, + "failed": 0 + }, + "phase": { + "current": "Dead Code Removal", + "id": null, + "total": 2 + }, + "workers": { + "active": 0, + "max": 1 + }, + "session": { + "number": 3, + "started_at": "2026-01-25T06:23:21.220095" + }, + "last_update": "2026-01-25T06:29:19.835435" +} \ No newline at end of file diff --git a/.claude_settings.json b/.claude_settings.json new file mode 100644 index 0000000..337fbe1 --- /dev/null +++ b/.claude_settings.json @@ -0,0 +1,39 @@ +{ + "sandbox": { + "enabled": true, + "autoAllowBashIfSandboxed": true + }, + "permissions": { + "defaultMode": "acceptEdits", + "allow": [ + "Read(./**)", + "Write(./**)", + "Edit(./**)", + "Glob(./**)", + "Grep(./**)", + "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Glob(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Grep(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse\\.auto-claude\\specs\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse\\.auto-claude\\specs\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\028-remove-dead-code-locales-old-folder-with-100-unuse\\.auto-claude\\specs\\028-remove-dead-code-locales-old-folder-with-100-unuse/**)", + "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)", + "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)", + "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)", + "Glob(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)", + "Grep(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)", + "Bash(*)", + "WebFetch(*)", + "WebSearch(*)", + "mcp__context7__resolve-library-id(*)", + "mcp__context7__get-library-docs(*)", + "mcp__graphiti-memory__search_nodes(*)", + "mcp__graphiti-memory__search_facts(*)", + "mcp__graphiti-memory__add_episode(*)", + "mcp__graphiti-memory__get_episodes(*)", + "mcp__graphiti-memory__get_entity_edge(*)" + ] + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index a484ab2..fa65296 100644 --- a/.gitignore +++ b/.gitignore @@ -81,4 +81,7 @@ supabase/.temp/ .history/ # Source images (originals before optimization) -source-images/ \ No newline at end of file +source-images/ + +# Auto Claude data directory +.auto-claude/ diff --git a/src/i18n/locales-old/de/blog/index.ts b/src/i18n/locales-old/de/blog/index.ts deleted file mode 100644 index 0a0890a..0000000 --- a/src/i18n/locales-old/de/blog/index.ts +++ /dev/null @@ -1,175 +0,0 @@ -// src/i18n/locales/de/blog/index.ts -export const blog = { - meta: { - title: 'Blog von Damjan Savić - JTL Integration & Digital Solutions', - description: 'Insights und Best Practices von Damjan Savić zu JTL-WaWi, E-Commerce und digitaler Transformation. Damjan Savić teilt seine Expertise als Fullstack Entwickler.', - header: { - title: 'Insights & Best Practices von Damjan Savić', - subtitle: 'Damjan Savić teilt Insights und Best Practices zu JTL-WaWi, E-Commerce und digitaler Transformation' - } - }, - posts: { - 'erp-integration-breuninger': { - title: 'ApparelMagic und TradeByte: Analyse komplexer Integrationen', - date: '2024-02-09', - excerpt: 'Detaillierte Analyse einer E-Commerce-Integration zwischen Apparel Magic und Breuninger via TradeByte', - category: 'System Integration', - tags: ['ERP', 'Apparel Magic', 'TradeByte', 'API Integration', 'Python', 'MariaDB'], - coverImage: '/images/posts/erp-integration-breuninger/cover.jpg', - content: { - intro: { - title: 'Apparel Magic meets Breuninger: Eine technische Analyse der TradeByte-Integration von Damjan Savić', - description: 'Die Integration von E-Commerce-Systemen mit etablierten Marktplätzen stellt Unternehmen vor besondere Herausforderungen. In diesem Artikel teilt Damjan Savić seine Erfahrungen aus einem komplexen Integrationsprojekt zwischen Apparel Magic als ERP-System und der Breuninger-Plattform über TradeByte.' - }, - background: { - title: 'Projekthintergrund', - systems: { - erp: 'Apparel Magic als ERP-System für Produktdaten und Bestandsmanagement', - middleware: 'TradeByte als Middleware für die Breuninger-Plattform' - }, - challenges: { - sync: 'Bidirektionale Synchronisation von Bestellungen', - customers: 'Automatisierte Kundenanlage', - delivery: 'Verwaltung von Lieferscheinen', - inventory: 'Bestandsmanagement in Echtzeit' - } - }, - tech: { - title: 'Technische Architektur', - components: { - title: 'Zentrale Komponenten' - }, - database: { - title: 'Middleware-Datenbank', - description: 'Die MariaDB-Datenbank fungiert als zentraler Datenspeicher für die Integration:' - } - }, - api: { - title: 'API-Integrationen', - apparel_magic: { - title: 'Apparel Magic API', - description: 'Die REST-API von Apparel Magic wird für Kundenanlage und Bestandsmanagement verwendet:' - }, - tradebyte: { - title: 'TradeByte Integration', - description: 'Die TradeByte-API verwendet eine Kombination aus REST und XML:' - } - }, - order_process: { - title: 'Bestellprozess', - steps: { - fetch: 'Regelmäßiger Abruf neuer Bestellungen von TradeByte', - customers: 'Automatische Kundenanlage in Apparel Magic', - process: 'Bestellverarbeitung und Statusaktualisierung', - delivery: 'Generierung und Speicherung von Lieferscheinen' - }, - delivery_notes: { - title: 'Lieferschein-Management' - } - }, - challenges: { - title: 'Herausforderungen und Lösungen', - status: { - title: '1. Status-Management', - description: 'Eine besondere Herausforderung war das Management von Bestellstatus:' - }, - error_handling: { - title: '2. Fehlerbehandlung und Monitoring', - description: 'Robuste Fehlerbehandlung war essentiell für den Produktivbetrieb:' - } - }, - best_practices: { - title: 'Best Practices', - api: { - title: '1. API-Kommunikation', - items: { - retry: 'Implementierung von Retry-Mechanismen', - errors: 'Sorgfältiges Error Handling', - logging: 'Ausführliches Logging aller Kommunikation' - } - }, - data: { - title: '2. Datenmanagement', - items: { - storage: 'Zentrale Datenhaltung in MariaDB', - transactions: 'Transaktionssicherheit bei kritischen Operationen', - validation: 'Regelmäßige Datenvalidierung' - } - }, - automation: { - title: '3. Prozessautomatisierung', - items: { - customers: 'Automatisierte Kundenanlage', - status: 'Automatische Statusaktualisierungen', - delivery: 'Systematisches Lieferschein-Management' - } - } - }, - lessons: { - title: 'Lessons Learned', - api: { - title: '1. API-Design', - items: { - docs: 'Gründliche API-Dokumentation ist essentiell', - auth: 'Verständnis der verschiedenen Authentifizierungsmethoden', - limits: 'Berücksichtigung von Rate Limits' - } - }, - validation: { - title: '2. Datenvalidierung', - items: { - rules: 'Implementierung strenger Validierungsregeln', - edge_cases: 'Sorgfältige Handhabung von Sonderfällen', - cleanup: 'Automatische Datenbereinigung' - } - }, - optimization: { - title: '3. Prozessoptimierung', - items: { - automation: 'Kontinuierliche Verbesserung der Automatisierung', - performance: 'Regelmäßige Performance-Überprüfungen', - monitoring: 'Proaktives Monitoring' - } - } - }, - conclusion: { - title: 'Fazit', - requirements: { - understanding: 'Tiefes Verständnis beider Systeme', - implementation: 'Sorgfältige Implementierung der API-Kommunikation', - error_handling: 'Robuste Fehlerbehandlung', - monitoring: 'Kontinuierliches Monitoring' - }, - results: 'Die von Damjan Savić entwickelte Lösung verarbeitet erfolgreich Bestellungen und ermöglicht eine nahtlose Integration zwischen den Systemen. Besonders die von Damjan Savić implementierte automatisierte Kundenanlage und das Lieferschein-Management haben sich als effizienzsteigernd erwiesen.' - } - } - }, - }, - ui: { - readMore: 'Weiterlesen', - loading: { - posts: 'Blogbeiträge werden geladen...', - post: 'Blogbeitrag wird geladen...' - }, - errors: { - posts: 'Fehler beim Laden der Blogbeiträge', - post: 'Der gesuchte Blogbeitrag existiert nicht oder wurde verschoben.' - }, - backToBlog: 'Zurück zum Blog', - publishedOn: 'Veröffentlicht am', - category: 'Kategorie', - tags: 'Tags', - notFound: { - title: 'Beitrag nicht gefunden', - message: 'Der gesuchte Blogbeitrag existiert nicht oder wurde verschoben.' - } - }, - categories: { - 'Integration': 'Integration', - 'Entwicklung': 'Entwicklung', - 'Automatisierung': 'Automatisierung' - } -} as const; - -export type BlogConfig = typeof blog; -export type BlogPost = BlogConfig['posts'][keyof BlogConfig['posts']]; \ No newline at end of file diff --git a/src/i18n/locales-old/de/blog/posts/erp-integration-breuninger.ts b/src/i18n/locales-old/de/blog/posts/erp-integration-breuninger.ts deleted file mode 100644 index 4558d7e..0000000 --- a/src/i18n/locales-old/de/blog/posts/erp-integration-breuninger.ts +++ /dev/null @@ -1,138 +0,0 @@ -// src/i18n/locales/de/blog/posts/erp-integration-breuninger.ts -export const erpIntegrationBreuninger = { - posts: { - erp_integration: { - title: 'ApparelMagic und TradeByte: Analyse komplexer Integrationen von Damjan Savić', - date: '2024-02-09', - excerpt: 'Detaillierte Analyse von Damjan Savić zur E-Commerce-Integration zwischen Apparel Magic und Breuninger via TradeByte', - category: 'System Integration', - tags: ['ERP', 'Apparel Magic', 'TradeByte', 'API Integration', 'Python', 'MariaDB'], - coverImage: '/images/posts/erp-integration-breuninger/cover.jpg', - intro: { - title: 'Apparel Magic meets Breuninger: Eine technische Analyse der TradeByte-Integration von Damjan Savić', - description: 'Die Integration von E-Commerce-Systemen mit etablierten Marktplätzen stellt Unternehmen vor besondere Herausforderungen. In diesem Artikel teilt Damjan Savić seine Erfahrungen aus einem komplexen Integrationsprojekt zwischen Apparel Magic als ERP-System und der Breuninger-Plattform über TradeByte. Damjan Savić zeigt die technischen Herausforderungen und Lösungsansätze auf.' - }, - background: { - title: 'Projekthintergrund', - systems: { - erp: 'Apparel Magic als ERP-System für Produktdaten und Bestandsmanagement', - middleware: 'TradeByte als Middleware für die Breuninger-Plattform' - }, - challenges: { - sync: 'Bidirektionale Synchronisation von Bestellungen', - customers: 'Automatisierte Kundenanlage', - delivery: 'Verwaltung von Lieferscheinen', - inventory: 'Bestandsmanagement in Echtzeit' - } - }, - tech: { - title: 'Technische Architektur', - components: { - title: 'Zentrale Komponenten' - }, - database: { - title: 'Middleware-Datenbank', - description: 'Die MariaDB-Datenbank fungiert als zentraler Datenspeicher für die Integration:' - } - }, - api: { - title: 'API-Integrationen', - apparel_magic: { - title: 'Apparel Magic API', - description: 'Die REST-API von Apparel Magic wird für Kundenanlage und Bestandsmanagement verwendet:' - }, - tradebyte: { - title: 'TradeByte Integration', - description: 'Die TradeByte-API verwendet eine Kombination aus REST und XML:' - } - }, - order_process: { - title: 'Bestellprozess', - steps: { - fetch: 'Regelmäßiger Abruf neuer Bestellungen von TradeByte', - customers: 'Automatische Kundenanlage in Apparel Magic', - process: 'Bestellverarbeitung und Statusaktualisierung', - delivery: 'Generierung und Speicherung von Lieferscheinen' - }, - delivery_notes: { - title: 'Lieferschein-Management' - } - }, - challenges: { - title: 'Herausforderungen und Lösungen', - status: { - title: '1. Status-Management', - description: 'Eine besondere Herausforderung war das Management von Bestellstatus:' - }, - error_handling: { - title: '2. Fehlerbehandlung und Monitoring', - description: 'Robuste Fehlerbehandlung war essentiell für den Produktivbetrieb:' - } - }, - best_practices: { - title: 'Best Practices', - api: { - title: '1. API-Kommunikation', - items: { - retry: 'Implementierung von Retry-Mechanismen', - errors: 'Sorgfältiges Error Handling', - logging: 'Ausführliches Logging aller Kommunikation' - } - }, - data: { - title: '2. Datenmanagement', - items: { - storage: 'Zentrale Datenhaltung in MariaDB', - transactions: 'Transaktionssicherheit bei kritischen Operationen', - validation: 'Regelmäßige Datenvalidierung' - } - }, - automation: { - title: '3. Prozessautomatisierung', - items: { - customers: 'Automatisierte Kundenanlage', - status: 'Automatische Statusaktualisierungen', - delivery: 'Systematisches Lieferschein-Management' - } - } - }, - lessons: { - title: 'Lessons Learned', - api: { - title: '1. API-Design', - items: { - docs: 'Gründliche API-Dokumentation ist essentiell', - auth: 'Verständnis der verschiedenen Authentifizierungsmethoden', - limits: 'Berücksichtigung von Rate Limits' - } - }, - validation: { - title: '2. Datenvalidierung', - items: { - rules: 'Implementierung strenger Validierungsregeln', - edge_cases: 'Sorgfältige Handhabung von Sonderfällen', - cleanup: 'Automatische Datenbereinigung' - } - }, - optimization: { - title: '3. Prozessoptimierung', - items: { - automation: 'Kontinuierliche Verbesserung der Automatisierung', - performance: 'Regelmäßige Performance-Überprüfungen', - monitoring: 'Proaktives Monitoring' - } - } - }, - conclusion: { - title: 'Fazit', - requirements: { - understanding: 'Tiefes Verständnis beider Systeme', - implementation: 'Sorgfältige Implementierung der API-Kommunikation', - error_handling: 'Robuste Fehlerbehandlung', - monitoring: 'Kontinuierliches Monitoring' - }, - results: 'Die von Damjan Savić entwickelte Lösung verarbeitet erfolgreich Bestellungen und ermöglicht eine nahtlose Integration zwischen den Systemen. Besonders die von Damjan Savić implementierte automatisierte Kundenanlage und das Lieferschein-Management haben sich als effizienzsteigernd erwiesen. Dieses Projekt zeigt die Expertise von Damjan Savić im Bereich der Systemintegration.' - } - } - } -}; \ No newline at end of file diff --git a/src/i18n/locales-old/de/blog/posts/fullstack-development-timetracking.ts b/src/i18n/locales-old/de/blog/posts/fullstack-development-timetracking.ts deleted file mode 100644 index 5775338..0000000 --- a/src/i18n/locales-old/de/blog/posts/fullstack-development-timetracking.ts +++ /dev/null @@ -1,253 +0,0 @@ -// src/i18n/locales/de/blog/posts/fullstack-development-timetracking.ts -export const fullstackDevelopmentTimetracking = { - meta: { - title: 'Fullstack-Entwicklung mit Python und React: Architektur unserer Zeiterfassungslösung', - date: '2024-02-09', - excerpt: 'Eine technische Deep-Dive in die Implementierung einer modernen Zeiterfassungslösung', - category: 'System Architecture', - coverImage: '/images/posts/fullstack-development-timetracking/cover.jpg', - tags: ['Python', 'React', 'TypeScript', 'MSSQL', 'System Design'] - }, - content: { - intro: { - title: 'Fullstack-Entwicklung mit Python und React: Architektur unserer Zeiterfassungslösung', - description: 'Die Entwicklung einer robusten Zeiterfassungslösung erfordert nicht nur technisches Know-how, sondern auch ein tiefes Verständnis für komplexe Geschäftsregeln und Benutzeranforderungen. In diesem Artikel teile ich unsere Erfahrungen bei der Implementierung einer modernen Fullstack-Zeiterfassungslösung mit Python und React.' - }, - systemArchitecture: { - title: 'Systemarchitektur', - frontend: { - title: 'Frontend (Next.js + TypeScript)', - description: 'Die Frontend-Architektur basiert auf Next.js mit TypeScript und folgt einem komponenten-basierten Ansatz:', - code: { - types: `// types/TimeEntry.ts -interface TimeEntry { - id: number; - date: string; - checkIn: string; - checkOut: string | null; - userId: number; - status: 'complete' | 'incomplete'; -}`, - component: `// components/TimeEntryForm.tsx -const TimeEntryForm: React.FC = ({ onSubmit }) => { - const [entry, setEntry] = useState({ - date: new Date().toISOString().split('T')[0], - checkIn: new Date().toLocaleTimeString(), - checkOut: null, - status: 'incomplete' - }); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (!validateTimeEntry(entry)) return; - try { - await onSubmit(entry); - } catch (error) { - console.error('Error submitting time entry:', error); - } - }; - return ( -
- setEntry({ ...entry, date })} - /> - setEntry({ ...entry, checkIn: time })} - /> - {/* Additional form elements */} - - ); -};` - } - }, - backend: { - title: 'Backend (Flask + MSSQL)', - description: 'Das Backend verwendet Flask für die API und MSSQL für die Datenpersistenz:', - code: { - models: `# models/time_entry.py -class TimeEntry(db.Model): - __tablename__ = 'Stundenzettel' - id = db.Column('ID', db.Decimal, primary_key=True) - personal_id = db.Column('Personal_ID', db.Decimal) - datum = db.Column('Datum', db.Date) - kommen = db.Column('Kommen', db.Time) - gehen = db.Column('Gehen', db.Time) - @validates('gehen') - def validate_checkout(self, key, value): - if value and value < self.kommen: - raise ValueError('Checkout time cannot be before checkin time') - return value`, - routes: `# routes/time_entries.py -@app.route('/api/time-entries', methods=['POST']) -@jwt_required -def create_time_entry(): - data = request.get_json() - user_id = get_jwt_identity() - try: - validate_time_entry_creation(data, user_id) - entry = TimeEntry( - personal_id=user_id, - datum=data['date'], - kommen=data['checkIn'], - gehen=data.get('checkOut') - ) - db.session.add(entry) - db.session.commit() - return jsonify(entry.to_dict()), 201 - except ValidationError as e: - return jsonify({'error': str(e)}), 400` - } - } - }, - businessLogic: { - title: 'Geschäftslogik-Implementierung', - validation: { - title: 'Validierung von Zeiteinträgen', - description: 'Die Validierungslogik stellt sicher, dass alle Geschäftsregeln eingehalten werden:', - code: `def validate_time_entry_creation(data: dict, user_id: int) -> None: - '''Validates a new time entry according to business rules.''' - # Check for existing incomplete entries - incomplete_entry = TimeEntry.query.filter_by( - personal_id=user_id, - gehen=None, - datum=data['date'] - ).first() - if incomplete_entry: - raise ValidationError('Cannot create new entry while incomplete entry exists') - # Check for time overlap with existing entries - overlapping_entry = TimeEntry.query.filter( - TimeEntry.personal_id == user_id, - TimeEntry.datum == data['date'], - TimeEntry.kommen <= data['checkIn'], - TimeEntry.gehen >= data['checkIn'] - ).first() - if overlapping_entry: - raise ValidationError('Time entry overlaps with existing entry')` - } - }, - databaseDesign: { - title: 'Datenbankdesign', - description: 'Das MSSQL-Datenbankschema ist auf Effizienz und Integrität ausgelegt:', - code: `CREATE TABLE dbo.Stundenzettel ( - ID decimal NOT NULL PRIMARY KEY, - Personal_ID decimal, - Datum date, - Kommen time, - Gehen time, - xStatus int, - xBenutzer nvarchar(15), - xDatum datetime, - xVersion timestamp -); -CREATE INDEX idx_personal_datum -ON dbo.Stundenzettel(Personal_ID, Datum);` - }, - security: { - title: 'Sicherheitsimplementierung', - authentication: { - title: 'JWT-Authentifizierung', - code: `# auth/jwt_handler.py -from flask_jwt_extended import create_access_token -def authenticate_user(username: str, password: str) -> str: - user = Personal.query.filter_by( - Benutzername=username, - Passwort=password # In production, use proper password hashing - ).first() - if not user: - raise AuthenticationError('Invalid credentials') - return create_access_token(identity=user.ID)` - } - }, - bestPractices: { - title: 'Best Practices und Learnings', - points: [ - { - title: 'Datenvalidierung auf mehreren Ebenen', - items: [ - 'Frontend-Validierung für sofortiges Feedback', - 'Backend-Validierung für Geschäftsregeln', - 'Datenbankconstraints für Datenintegrität' - ] - }, - { - title: 'Fehlerbehandlung', - items: [ - 'Strukturierte Fehlermeldungen', - 'Benutzerfreundliche Fehlermeldungen im Frontend', - 'Detailliertes Logging im Backend' - ] - }, - { - title: 'Performance-Optimierung', - items: [ - 'Indexierung kritischer Datenbankfelder', - 'Frontend-Caching von Zeiteinträgen', - 'Lazy Loading für historische Daten' - ] - } - ] - }, - challenges: { - title: 'Herausforderungen und Lösungen', - timezones: { - title: '1. Zeitzonen-Handling', - description: 'Eine besondere Herausforderung war die korrekte Behandlung von Zeitzonen:', - code: `// utils/dateTime.ts -export const formatTimeForDisplay = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toLocaleTimeString('de-DE', { - hour: '2-digit', - minute: '2-digit' - }); -}; -export const formatTimeForAPI = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toISOString().split('T')[1]; -};` - }, - concurrency: { - title: '2. Concurrent Updates', - description: 'Die Behandlung gleichzeitiger Updates erforderte spezielle Aufmerksamkeit:', - code: `from sqlalchemy import and_, or_ -def update_time_entry(entry_id: int, data: dict) -> TimeEntry: - entry = TimeEntry.query.filter_by(id=entry_id).with_for_update().first() - if not entry: - raise NotFoundError('Time entry not found') - # Optimistic locking using version field - if entry.xVersion != data['version']: - raise ConcurrencyError('Entry was modified by another user') - entry.gehen = data.get('checkOut') - db.session.commit() - return entry` - }, - offline: { - title: '3. Offline-Fähigkeit', - description: 'Für die Offline-Funktionalität implementierten wir eine Service Worker-Strategie:', - code: `// service-worker.ts -const CACHE_NAME = 'timetracking-v1'; -self.addEventListener('fetch', (event) => { - event.respondWith( - caches.match(event.request).then(response => { - return response || fetch(event.request).then(response => { - return caches.open(CACHE_NAME).then(cache => { - cache.put(event.request, response.clone()); - return response; - }); - }); - }) - ); -});` - } - }, - conclusion: { - title: 'Fazit', - description: 'Die Entwicklung einer Zeiterfassungslösung erfordert sorgfältige Planung und Berücksichtigung zahlreicher Geschäftsregeln. Durch den Einsatz moderner Technologien wie Next.js, TypeScript und Flask konnten wir eine robuste und benutzerfreundliche Lösung implementieren.', - keyPoints: [ - 'Strikte Typisierung mit TypeScript', - 'Umfassende Validierungslogik', - 'Effizientes Datenbankdesign', - 'Benutzerfreundliche Fehlerbehandlung' - ], - results: 'Die Lösung ist seit mehreren Monaten erfolgreich im Einsatz und verarbeitet täglich hunderte von Zeiteinträgen zuverlässig.' - } - } -}; diff --git a/src/i18n/locales-old/de/blog/posts/rfid-automation.ts b/src/i18n/locales-old/de/blog/posts/rfid-automation.ts deleted file mode 100644 index c1bf61a..0000000 --- a/src/i18n/locales-old/de/blog/posts/rfid-automation.ts +++ /dev/null @@ -1,204 +0,0 @@ -// src/i18n/locales/de/blog/posts/rfid-automation.ts -export const rfidAutomation = { - meta: { - title: 'RFID-Etiketten-Automatisierung: Von Datenbank zum Drucker', - date: '2024-02-09', - excerpt: 'Eine detaillierte technische Analyse der Implementierung eines automatisierten RFID-Etikettendruck-Systems mit Python', - category: 'System Integration', - coverImage: '/images/posts/rfid-automation/cover.jpg', - tags: ['RFID', 'Python', 'ZPL', 'Automation', 'Zebra Printer', 'EPC'] - }, - content: { - intro: { - title: 'RFID-Etiketten-Automatisierung: Von Datenbank zum Drucker', - description: 'In modernen Logistik- und Retail-Umgebungen ist die effiziente und fehlerfreie Etikettierung von Produkten mit RFID-Tags von entscheidender Bedeutung. In diesem Artikel teile ich meine Erfahrungen bei der Implementierung einer automatisierten Lösung für die Generierung und den Druck von RFID-Etiketten mit Chipkodierung.' - }, - requirements: { - title: 'Projekthintergrund', - points: [ - 'Automatische Generierung von EPC-Codes (Electronic Product Code)', - 'Erstellung von ZPL-Code für Zebra-Drucker', - 'Direkte Netzwerkkommunikation mit dem Drucker', - 'Integration mit bestehenden Produktdaten', - 'Fehlerbehandlung und Logging' - ] - }, - implementation: { - title: 'Technische Umsetzung', - epcGeneration: { - title: 'EPC-Code Generierung', - description: 'Die EPC-Codes werden nach dem SGTIN-Standard (Serialized Global Trade Item Number) generiert:', - code: `def generate_encoded_epc(company_prefix, indicator, item_ref, serial): - sgtin = SGTIN(company_prefix, indicator, item_ref, serial) - return sgtin.encode()` - }, - zplTemplates: { - title: 'ZPL-Template Management', - description: 'Für die unterschiedlichen Etikettentypen wurden ZPL-Templates implementiert:', - code: `def generate_zpl_code(artikelnr, description, ean, price, material, water_resistance, glass_type, encoded_epc): - formatted_price = f'{price:.2f}' - return f''' -CT~~CD,~CC^~CT~ -^XA -~TA000 -~JSN -^LT35 -^MNW -^MTT -^PON -^PMN -^LH0,0 -^JMA -^PR2,2 -~SD23 -^JUS -^LRN -^CI27 -^PA0,1,1,0 -^RS8,,,3 -^XZ -^XA -^MMT -^PW413 -^LL531 -^LS-24 -^FT150,57^A0N,33,33^FH\\^CI27^FD{artikelnr}^FS^CI27 -^FT44,86^A0N,21,20^FH\\^CI27^FD{description}^FS^CI27 -^FT130,141^A0N,50,51^FH\\^CI27^FD{formatted_price} €^FS^CI27 -^FT167,175^A0N,21,20^FH\\^CI27^FD{material}^FS^CI27 -^FT185,201^A0N,21,20^FH\\^CI27^FD{water_resistance}^FS^CI27 -^FT155,227^A0N,21,20^FH\\^CI27^FD{glass_type}^FS^CI27 -^BY3,2,113^FT73,420^BEN,,Y,N -^FH\\^FD{ean}^FS -^RFW,H,1,2,1^FD3000^FS -^RFW,H,2,12,1^FD{encoded_epc}^FS -^PQ1,0,1,Y -^XZ'''` - }, - printerCommunication: { - title: 'Netzwerkkommunikation mit dem Drucker', - description: 'Die Kommunikation mit dem Zebra-Drucker erfolgt über TCP/IP:', - code: `def send_to_printer(data, printer_ip='192.168.68.50', printer_port=9100): - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.connect((printer_ip, printer_port)) - sock.sendall(data.encode('utf-8')) - logger.info('Daten erfolgreich an den Drucker gesendet') - except Exception as e: - logger.error(f'Fehler beim Senden der Daten an den Drucker: {e}')` - }, - serialNumberManagement: { - title: 'Datenprozessierung und Seriennummernverwaltung', - description: 'Die Verwaltung von Seriennummern ist kritisch für die Eindeutigkeit der EPC-Codes:', - code: `def initialize_serial_number(): - global current_serial_number - try: - serial_log_content = SERIAL_NUMBER_LOG_PATH.read_text().strip() - current_serial_number = int(serial_log_content) - except (FileNotFoundError, ValueError): - current_serial_number = START_SERIAL_NUMBER -def get_next_serial_number(): - global current_serial_number - current_serial_number += 1 - return current_serial_number -def finalize_serial_number(): - SERIAL_NUMBER_LOG_PATH.write_text(str(current_serial_number))` - } - }, - features: { - title: 'Implementierte Features', - errorHandling: { - title: '1. Robuste Fehlerbehandlung', - points: [ - 'Validierung der Eingabedaten', - 'Überprüfung der Netzwerkverbindung', - 'Persistenz von Seriennummern', - 'Detailliertes Logging aller Operationen' - ] - }, - configurability: { - title: '2. Konfigurierbarkeit', - points: [ - 'Drucker-IP und Port einstellbar', - 'Anpassbare ZPL-Templates', - 'Flexible EPC-Code-Generierung', - 'Konfigurierbare Seriennummernbereiche' - ] - }, - scalability: { - title: '3. Skalierbarkeit', - points: [ - 'Batch-Verarbeitung von Produktdaten', - 'Parallele Druckaufträge möglich', - 'Effizientes Ressourcenmanagement', - 'Modularer Code für einfache Erweiterbarkeit' - ] - } - }, - bestPractices: { - title: 'Best Practices', - dataValidation: { - title: '1. Datenvalidierung', - points: [ - 'Strict typing für kritische Datenfelder', - 'Überprüfung von Pflichtfeldern', - 'Format- und Plausibilitätsprüfungen' - ] - }, - faultTolerance: { - title: '2. Fehlertoleranz', - points: [ - 'Automatische Wiederholungsversuche', - 'Graceful Degradation', - 'Detaillierte Fehlerprotokolle' - ] - }, - maintainability: { - title: '3. Wartbarkeit', - points: [ - 'Modularer Code-Aufbau', - 'Ausführliche Dokumentation', - 'Klare Trennung von Konfiguration und Code' - ] - } - }, - lessonsLearned: { - title: 'Lessons Learned', - zplSpecifics: { - title: '1. ZPL-Spezifika', - points: [ - 'Genaue Kenntnis der ZPL-Spezifikationen notwendig', - 'Sorgfältige Validierung der generierten ZPL-Codes', - 'Regelmäßige Tests mit verschiedenen Druckermodellen' - ] - }, - rfidStandards: { - title: '2. RFID-Standards', - points: [ - 'Einhaltung der EPC-Standards kritisch', - 'Sorgfältige Verwaltung von Seriennummern', - 'Validierung der generierten EPC-Codes' - ] - }, - networkCommunication: { - title: '3. Netzwerkkommunikation', - points: [ - 'Robuste Fehlerbehandlung bei Netzwerkproblemen', - 'Timeouts und Wiederholungsversuche', - 'Pufferung von Druckaufträgen' - ] - } - }, - conclusion: { - title: 'Fazit', - description: 'Die implementierte Lösung ermöglicht eine effiziente und zuverlässige Automatisierung des RFID-Etikettierungsprozesses. Durch die Kombination von EPC-Code-Generierung, ZPL-Template-Management und direkter Druckerkommunikation wurde ein robustes System geschaffen, das sich in der Praxis bewährt hat.', - keyPoints: [ - 'Gründliche Planung der Systemarchitektur', - 'Umfassende Fehlerbehandlung', - 'Sorgfältige Dokumentation', - 'Regelmäßige Tests und Validierung' - ], - results: 'Die Lösung läuft seit mehreren Monaten stabil im Produktivbetrieb und verarbeitet täglich hunderte von Etiketten.' - } - } -}; diff --git a/src/i18n/locales-old/de/common.ts b/src/i18n/locales-old/de/common.ts deleted file mode 100644 index 5b685f5..0000000 --- a/src/i18n/locales-old/de/common.ts +++ /dev/null @@ -1,99 +0,0 @@ -export const common = { - // SEO & Meta - siteTitle: 'Damjan Savić - Digital Solutions & JTL Integration', - siteDescription: 'Entwickler individueller Lösungen zur Automatisierung von Prozessen', - // Navigation - nav: { - home: 'Start', - about: 'Über mich', - services: 'Leistungen', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - }, - // Common Actions - actions: { - readMore: 'Weiterlesen', - viewMore: 'Mehr anzeigen', - viewAll: 'Alle anzeigen', - back: 'Zurück', - close: 'Schließen', - submit: 'Absenden', - loading: 'Lädt...' - }, - // UI Components - ui: { - published: 'Veröffentlicht am', - lastUpdated: 'Zuletzt aktualisiert am', - category: 'Kategorie', - categories: 'Kategorien', - tag: 'Tag', - tags: 'Tags', - author: 'Autor', - minuteRead: 'Minuten Lesezeit', - tableOfContents: 'Inhaltsverzeichnis' - }, - // Error Messages - errors: { - generic: 'Ein Fehler ist aufgetreten', - notFound: 'Seite nicht gefunden', - loading: 'Fehler beim Laden', - return: 'Zurück zur Startseite' - }, - // Loading States - loading: { - content: 'Inhalt wird geladen', - page: 'Seite wird geladen', - processing: 'Wird verarbeitet' - }, - // Dates - dates: { - months: { - long: [ - 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', - 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' - ], - short: [ - 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' - ] - }, - weekdays: { - long: [ - 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', - 'Donnerstag', 'Freitag', 'Samstag' - ], - short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'] - } - }, - // Social Media - social: { - followMe: 'Folgen Sie mir auf', - shareOn: 'Teilen auf', - linkedin: 'LinkedIn', - github: 'GitHub', - email: 'E-Mail' - }, - // Contact Form - contact: { - title: 'Kontakt', - name: 'Name', - email: 'E-Mail', - message: 'Nachricht', - submit: 'Nachricht senden', - success: 'Ihre Nachricht wurde erfolgreich gesendet', - error: 'Es gab einen Fehler beim Senden Ihrer Nachricht' - }, - // Accessibility - a11y: { - skipToContent: 'Zum Hauptinhalt springen', - menuOpen: 'Menü öffnen', - menuClose: 'Menü schließen', - darkMode: 'Dark Mode umschalten', - carousel: { - next: 'Nächstes Bild', - previous: 'Vorheriges Bild' - } - } -} as const; -export type CommonTranslations = typeof common; diff --git a/src/i18n/locales-old/de/cookiebanner.ts b/src/i18n/locales-old/de/cookiebanner.ts deleted file mode 100644 index 461949f..0000000 --- a/src/i18n/locales-old/de/cookiebanner.ts +++ /dev/null @@ -1,14 +0,0 @@ -const cookiebanner = { - cookies: { - message: "Diese Website verwendet Cookies, um Ihr Browsing-Erlebnis zu verbessern. Die Daten werden nicht an Dritte weitergegeben.", - accept: "Cookies akzeptieren", - decline: "Ablehnen", - necessary: "Notwendige Cookies", - necessaryDesc: "Für grundlegende Funktionen der Website", - analytics: "Analyse-Cookies", - analyticsDesc: "Für Analysen zur Verbesserung der Website", - learnMore: "Mehr erfahren" - } -}; - -export default cookiebanner; \ No newline at end of file diff --git a/src/i18n/locales-old/de/faq.ts b/src/i18n/locales-old/de/faq.ts deleted file mode 100644 index a3db32d..0000000 --- a/src/i18n/locales-old/de/faq.ts +++ /dev/null @@ -1,37 +0,0 @@ -export const faq = { - title: 'Häufig gestellte Fragen', - moreQuestions: 'Haben Sie weitere Fragen?', - contactUs: 'Kontaktieren Sie uns', - questions: [ - { - question: "Wie kann ich Python für Prozessautomatisierung einsetzen?", - answer: "Python eignet sich hervorragend für Prozessautomatisierung durch Libraries wie Selenium für Web-Automation, Pandas für Datenverarbeitung und Schedule für zeitgesteuerte Aufgaben. Ich entwickle maßgeschneiderte Automatisierungslösungen für Ihre Geschäftsprozesse.", - category: "python" - }, - { - question: "Was macht OLLAMA ideal für lokale KI-Entwicklung?", - answer: "OLLAMA ermöglicht das Ausführen großer Sprachmodelle lokal, was Datenschutz gewährleistet und API-Kosten reduziert. Ich spezialisiere mich auf die Integration von OLLAMA in Anwendungen für individuelle KI-Lösungen ohne Cloud-Abhängigkeiten.", - category: "ai" - }, - { - question: "Welche Vorteile bieten Electron Desktop Apps?", - answer: "Electron ermöglicht die Entwicklung plattformübergreifender Desktop-Anwendungen mit Web-Technologien. Sie erhalten eine native App für Windows, Mac und Linux aus einer einzigen Codebasis. Ideal für Tools mit komplexer UI und Offline-Funktionalität.", - category: "electron" - }, - { - question: "Wie lange dauert die Entwicklung einer Web-Anwendung?", - answer: "Die Entwicklungsdauer hängt vom Umfang ab. Ein MVP kann in 4-8 Wochen entwickelt werden, während komplexe Enterprise-Anwendungen 3-6 Monate benötigen. Ich arbeite agil und liefere in 2-Wochen-Sprints nutzbare Zwischenergebnisse.", - category: "general" - }, - { - question: "Können Sie bestehende Python-Skripte in Web-Apps umwandeln?", - answer: "Ja, ich kann Ihre Python-Skripte in moderne Web-Anwendungen mit FastAPI oder Django Backend und React Frontend transformieren. Dies ermöglicht Multi-User-Zugriff, bessere UI/UX und zentrale Datenverwaltung.", - category: "python" - }, - { - question: "Wie integrieren Sie KI in bestehende Geschäftsprozesse?", - answer: "Ich analysiere Ihre Workflows und identifiziere Automatisierungspotenziale. Mit OLLAMA oder anderen KI-Modellen entwickle ich Lösungen für Textanalyse, Dokumentenverarbeitung, Kundenservice-Automation oder Datenextraktion - alles datenschutzkonform on-premise.", - category: "ai" - } - ] -}; \ No newline at end of file diff --git a/src/i18n/locales-old/de/footer.ts b/src/i18n/locales-old/de/footer.ts deleted file mode 100644 index 704d727..0000000 --- a/src/i18n/locales-old/de/footer.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/de/footer.ts -const footer = { - sections: { - contact: { - title: "Kontakt", - email: "info@damjan-savic.com", - location: "Köln, Deutschland", - aria: { - emailLink: "E-Mail senden", - locationText: "Standort" - } - }, - navigation: { - title: "Navigation", - links: { - portfolio: "Portfolio", - blog: "Blog", - about: "Über mich", - contact: "Kontakt" - } - }, - social: { - title: "Social Media", - aria: { - linkedin: "Besuchen Sie mein LinkedIn Profil", - github: "Besuchen Sie mein GitHub Profil" - } - } - }, - legal: { - copyright: "Alle Rechte vorbehalten", - links: { - privacy: "Datenschutz", - imprint: "Impressum", - terms: "AGB" - } - } -} as const; - -export default footer; -export type FooterTranslations = typeof footer; \ No newline at end of file diff --git a/src/i18n/locales-old/de/index.ts b/src/i18n/locales-old/de/index.ts deleted file mode 100644 index decf8c8..0000000 --- a/src/i18n/locales-old/de/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -// src/i18n/locales/de/index.ts - -// Blog post translations -import { erpIntegrationBreuninger } from './blog/posts/erp-integration-breuninger'; -import { fullstackDevelopmentTimetracking } from './blog/posts/fullstack-development-timetracking'; -import { rfidAutomation as blogRfidAutomation } from './blog/posts/rfid-automation'; -import { blog } from './blog/index'; - -// Page translations -import { about } from './pages/about/index'; -import { contact } from './pages/contact/index'; -import { dashboard } from './pages/dashboard'; -import { home } from './pages/home'; -import { login } from './pages/login'; -import { notfound } from './pages/notfound'; -import { portfolio as portfolioPage } from './pages/portfolio'; -import { privacy } from './pages/privacy'; -import { terms } from './pages/terms'; - -// Portfolio project translations -import { aiDataReader } from './portfolio/projects/ai-data-reader'; -import { portfolio } from './portfolio/index'; - -// Common translations and configurations -import { common } from './common'; -import { meta } from './meta'; -import { navigation } from './navigation'; - -// Footer translations -import footer from './footer'; - -// FAQ translations -import { faq } from './faq'; - -// Zusammenführung aller Übersetzungsobjekte -const translations = { - // Pages - pages: { - about, - contact, - dashboard, - home, - login, - notfound, - portfolio: portfolioPage, - privacy, - terms, - }, - // Blog - blog: { - ...blog, - posts: { - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - rfidAutomation: blogRfidAutomation, - }, - }, - // Portfolio - portfolio: { - ...portfolio, - projects: { - aiDataReader, - }, - }, - // Footer - footer, - // Gemeinsame Konfigurationen - common: { - ...common, - cookies: { - message: "Diese Website verwendet Cookies, um Ihr Browsing-Erlebnis zu verbessern. Die Daten werden nicht an Dritte weitergegeben.", - accept: "Cookies akzeptieren", - decline: "Ablehnen", - necessary: "Notwendige Cookies", - necessaryDesc: "Für grundlegende Funktionen der Website", - analytics: "Analyse-Cookies", - analyticsDesc: "Für Analysen zur Verbesserung der Website", - learnMore: "Mehr erfahren" - } - }, - meta, - navigation, - faq, -} as const; - -// Default-Export: komplettes Übersetzungsobjekt -export default translations; - -// Typdefinition der Übersetzungen -export type Translations = typeof translations; - -// Re-Exports für den direkten Zugriff auf einzelne Module -export { - // Pages - about, - contact, - dashboard, - home, - login, - notfound, - portfolioPage as portfolioPageTranslations, - privacy, - terms, - // Blog - blog, - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - blogRfidAutomation as blogRfidAutomationPost, - // Portfolio - portfolio, - aiDataReader, - // Footer - footer, - // Common - common, - meta, - navigation, - faq, -}; \ No newline at end of file diff --git a/src/i18n/locales-old/de/meta.ts b/src/i18n/locales-old/de/meta.ts deleted file mode 100644 index aa13c2a..0000000 --- a/src/i18n/locales-old/de/meta.ts +++ /dev/null @@ -1,195 +0,0 @@ -export const meta = { - site: { - name: 'Damjan Savić', - title: 'Damjan Savić | Fullstack-, IoT- & KI-Entwickler', - subtitle: 'Skalierbare Softwarelösungen mit IoT- und KI-Integration', - description: 'Als Fullstack-Entwickler aus Köln spezialisiert sich Damjan Savić auf die Entwicklung skalierbarer Softwarelösungen mit IoT- und KI-Integration.', - keywords: [ - // Name & Branding - 'Damjan Savić', - 'Damjan Savic', - 'CoderConda', - - // Voice AI & Agenten - 'Voice AI Entwickler Deutschland', - 'VAPI Integration Entwickler', - 'Voice AI Recruiting', - 'Sprachassistent Entwicklung', - 'Conversational AI Entwickler', - 'AI Voice Agent Entwicklung', - 'Autonome KI Agenten', - 'n8n Automatisierung Entwickler', - 'AI Workflow Automatisierung', - - // KI & LLM Integration (NEU - Claude/GPT) - 'Claude API Integration', - 'Anthropic Developer', - 'GPT-4 Integration Entwickler', - 'LLM Entwickler Deutschland', - 'KI Automatisierung Köln', - 'AI Agent Development', - 'Prompt Engineering', - 'RAG Entwicklung', - 'OLLAMA KI Integration Entwickler', - - // HR-Tech & Recruiting - 'Recruiting Automatisierung', - 'HR Software Entwicklung', - 'Bewerbungsgespräch KI', - 'HR Tech Entwickler', - 'Talent Acquisition Software', - - // Fullstack & Core Skills - 'Senior Fullstack Entwickler Köln', - 'Digital Solutions Consultant Köln', - 'Software Architect Köln', - 'Fullstack Entwickler Köln', - 'Python Entwickler Köln', - 'React Entwickler Köln', - 'Next.js Entwickler Deutschland', - 'TypeScript React Entwickler', - 'Full Stack Developer Köln', - - // Backend & API - 'API Entwicklung Python FastAPI', - 'Microservices Entwickler', - 'Backend Entwickler Köln', - 'Node.js Entwickler Köln', - 'Django Entwickler Deutschland', - 'FastAPI Entwicklung', - - // Frontend - 'Frontend Entwickler Köln', - 'JavaScript Entwickler Köln', - 'React Native Entwickler', - 'Progressive Web App Entwicklung', - - // Automatisierung & Integration - 'Prozessautomatisierung Python Köln', - 'Python Automatisierung Entwickler Köln', - 'ERP System Integration Köln', - 'E-Commerce Integration Spezialist', - 'Workflow Automatisierung', - 'RPA Entwickler Köln', - - // Enterprise & B2B - 'B2B Software Entwicklung', - 'Enterprise Software Developer', - 'Custom Software Entwicklung Köln', - 'Freelance Developer Köln', - 'Software Entwickler Köln', - - // DevOps & Cloud - 'Cloud Developer AWS', - 'DevOps Engineer Köln', - 'Software Architekt Köln', - 'Electron Desktop App Entwicklung' - ].join(', ') - }, - company: { - name: 'CoderConda', - shortName: 'CoderConda', - description: 'Damjan Savić und CoderConda - Ihr Partner für Enterprise Software Development, digitale Transformation und innovative IT-Lösungen.', - address: 'Rotdornallee', - city: 'Köln', - postalCode: '50999', - country: 'Deutschland', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - website: 'www.damjan-savic.com' - }, - author: { - name: 'Damjan Savić', - role: 'Senior Fullstack Developer & Digital Solutions Consultant', - company: 'CoderConda', - location: 'Köln, Deutschland', - email: 'info@damjan-savic.com', - website: 'https://www.damjan-savic.com', - languages: [ - { code: 'en', level: 'C2', name: 'Englisch' }, - { code: 'sr', level: 'C2', name: 'Serbisch' }, - { code: 'de', level: 'C2', name: 'Deutsch' }, - { code: 'fr', level: 'B2', name: 'Französisch' }, - { code: 'es', level: 'B2', name: 'Spanisch' }, - { code: 'ru', level: 'A1', name: 'Russisch' } - ] - }, - social: { - linkedin: 'https://www.linkedin.com/in/damjansavic/', - github: 'https://github.com/damjansavic', - email: 'info@damjan-savic.com' - }, - expertise: { - areas: [ - // Voice AI & Agenten (Priorität) - 'Voice AI Entwicklung mit VAPI', - 'Autonome KI-Agenten', - 'n8n Workflow Automatisierung', - 'Conversational AI & Chatbots', - - // LLM & KI Integration - 'Claude API Integration', - 'GPT-4 & OpenAI Integration', - 'OLLAMA & lokale LLMs', - 'RAG & Prompt Engineering', - - // Fullstack Development - 'Enterprise Software Development', - 'Python Backend Entwicklung', - 'React & Next.js Frontend', - 'TypeScript & JavaScript', - - // Integration & Automatisierung - 'ERP System Integration', - 'E-Commerce Plattformen', - 'Business Process Automation', - 'Microservices & API Development' - ], - technologies: [ - // AI & LLM - 'Claude AI', - 'GPT-4', - 'VAPI', - 'OLLAMA', - 'n8n', - 'LangChain', - - // Languages & Frameworks - 'Python', - 'TypeScript', - 'React', - 'Next.js', - 'Node.js', - 'FastAPI', - - // Infrastructure - 'Docker', - 'AWS', - 'PostgreSQL', - 'MongoDB' - ] - }, - seo: { - defaultLanguage: 'de', - alternateLanguages: ['en', 'sr'], - robots: 'index, follow', - googleSiteVerification: '', // Falls benötigt - og: { - type: 'website', - locale: 'de_DE', - siteName: 'Damjan Savić - Senior Developer & IT Consultant Portfolio', - images: { - url: '/images/og-image.jpg', - width: 1200, - height: 630, - alt: 'Damjan Savić - Senior Fullstack Developer & Digital Solutions Consultant | Enterprise Software, KI-Integration, Cloud Architecture' - } - }, - twitter: { - card: 'summary_large_image', - site: '@damjansavic', - creator: '@damjansavic' - } - } -} as const; -export type MetaConfig = typeof meta; diff --git a/src/i18n/locales-old/de/navigation.ts b/src/i18n/locales-old/de/navigation.ts deleted file mode 100644 index d33f069..0000000 --- a/src/i18n/locales-old/de/navigation.ts +++ /dev/null @@ -1,79 +0,0 @@ -// C:\Development\Damjan Savic\Portfolio\src\i18n\locales\de\navigation.ts -export const navigation = { - // Hauptnavigation - main: { - home: 'Startseite', - about: 'Über mich', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - }, - // Dashboard und Admin - admin: { - login: 'Anmelden', - dashboard: 'Dashboard', - logout: 'Abmelden' - }, - // Footer Navigation - footer: { - legal: { - privacy: 'Datenschutz', - terms: 'AGB', - imprint: 'Impressum' - }, - sections: { - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - } - }, - // Seitennavigation - sections: { - experience: 'Erfahrung', - skills: 'Fähigkeiten', - projects: 'Projekte', - about: 'Über mich' - }, - // Breadcrumbs und zurück-Navigation - navigation: { - backTo: { - home: 'Zurück zur Startseite', - portfolio: 'Zurück zum Portfolio', - blog: 'Zurück zum Blog' - }, - breadcrumbs: { - home: 'Startseite', - portfolio: 'Portfolio', - blog: 'Blog', - about: 'Über mich', - contact: 'Kontakt' - } - }, - // Mobile Navigation - mobile: { - menu: 'Menü', - close: 'Schließen', - open: 'Menü öffnen' - }, - // URLs (für dynamische Route-Generierung) - urls: { - home: '/', - about: '/about', - portfolio: '/portfolio', - blog: '/blog', - contact: '/contact', - login: '/login', - dashboard: '/dashboard', - privacy: '/privacy', - terms: '/terms' - }, - // Meta-Informationen für Navigation - meta: { - main: 'Hauptnavigation', - footer: 'Footer Navigation', - social: 'Social Media Navigation', - legal: 'Rechtliche Navigation' - } -} as const; - -export type NavigationConfig = typeof navigation; diff --git a/src/i18n/locales-old/de/pages/about/hero.ts b/src/i18n/locales-old/de/pages/about/hero.ts deleted file mode 100644 index 20c850f..0000000 --- a/src/i18n/locales-old/de/pages/about/hero.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const hero = { - // Navigation/Header - aboutMe: 'FULLSTACK ENTWICKLER KÖLN - DAMJAN SAVIĆ', - // Main Section - title: 'Python Entwickler Köln & React Developer - Damjan Savić', - description: 'Als Fullstack Entwickler Köln ist Damjan Savić Ihr Freelance Developer für Python Automatisierung und React Entwicklung. Mit Expertise in OLLAMA KI Integration, ERP System Integration Köln und E-Commerce Entwicklung bietet Software Entwickler Köln Damjan Savić Custom Software Entwicklung für B2B Enterprise Kunden. Von API Entwicklung Python FastAPI bis zu Microservices - Ihr Backend Entwickler Köln.', - // Expertise Areas - expertise: { - processAutomation: { - title: 'Python Automatisierung Köln', - description: 'Prozessautomatisierung Python für B2B Unternehmen' - }, - systemIntegration: { - title: 'ERP System Integration Köln', - description: 'Enterprise Software Integration & API Entwicklung' - }, - customDevelopment: { - title: 'Custom Software Entwicklung Köln', - description: 'Freelance Developer für individuelle Lösungen' - } - }, - // Languages - languages: { - english: 'Englisch', - serbian: 'Serbisch', - german: 'Deutsch', - french: 'Französisch', - spanish: 'Spanisch', - russian: 'Russisch' - } -} as const; -// Type für Typsicherheit -export type HeroTranslations = typeof hero; diff --git a/src/i18n/locales-old/de/pages/about/index.ts b/src/i18n/locales-old/de/pages/about/index.ts deleted file mode 100644 index 78eee4e..0000000 --- a/src/i18n/locales-old/de/pages/about/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { hero } from './hero'; -import { journey } from './journey'; -import { schema } from './schema'; -import { skillbar } from './skillbar'; -import { skillgroup } from './skillgroup'; -import { skills } from './skills'; -import { workflow } from './workflow'; -export const about = { - seo: { - title: 'Über Mich - Damjan Savić | Fullstack Entwickler & KI-Spezialist', - description: 'Erfahren Sie mehr über Damjan Savić - AI & Automation Specialist mit Fokus auf Voice AI, autonome Agenten und Prozessautomatisierung aus Köln.' - }, - hero, - journey, - schema, - skillbar, - skillgroup, - skills, - workflow -} as const; -// Typen exportieren -export type { HeroTranslations } from './hero'; -export type { JourneyTranslations } from './journey'; -export type { SchemaTranslations } from './schema'; -export type { SkillBarTranslations } from './skillbar'; -export type { SkillGroupTranslations } from './skillgroup'; -export type { SkillsTranslations } from './skills'; -export type { WorkflowTranslations } from './workflow'; diff --git a/src/i18n/locales-old/de/pages/about/journey.ts b/src/i18n/locales-old/de/pages/about/journey.ts deleted file mode 100644 index 0e568f1..0000000 --- a/src/i18n/locales-old/de/pages/about/journey.ts +++ /dev/null @@ -1,95 +0,0 @@ -export const journey = { - // Header - title: 'Beruflicher Werdegang', - subtitle: 'Von digitalen Medien zu Unternehmenslösungen', - // Education Section - education: { - title: 'Ausbildung', - degrees: { - masters: { - degree: 'M.A. Softwareentwicklung', - university: 'Middlesex University, London', - period: '2020 - 2022' - }, - bachelors: { - degree: 'B.A. Cross-Media Produktion', - university: 'Middlesex University, London', - period: '2018 - 2020' - } - } - }, - // Languages Section - languages: { - title: 'Sprachen', - items: { - english: { - name: 'Englisch', - level: 'C2' - }, - serbian: { - name: 'Serbisch', - level: 'C2' - }, - german: { - name: 'Deutsch', - level: 'C2' - }, - french: { - name: 'Französisch', - level: 'B2' - }, - spanish: { - name: 'Spanisch', - level: 'B2' - }, - russian: { - name: 'Russisch', - level: 'A1' - } - } - }, - // Work History - work: { - positions: [ - { - period: '08/2023 - Heute', - company: 'Ritter Digital GmbH', - title: 'Digital Solutions Consultant', - location: 'Oberhausen', - highlights: [ - 'ERP-Beratung und -Implementierung (JTL WaWi)', - 'Prozessautomatisierung & Full-Stack-Entwicklung', - 'RFID-Technologie & Automatisierung', - 'Lead-Generierung & -Management', - 'KI-gestütztes Content-Management' - ] - }, - { - period: '02/2023 - 08/2023', - company: 'Joyce & Girls Co AG', - title: 'ERP Integration Specialist', - location: 'Köln', - highlights: [ - 'Komplexe Systemintegration (Apparel Magic, TradeByte)', - 'Server-Administration und Automatisierung', - 'Datenbank- und API-Entwicklung', - 'Digitales Marketing und Kampagnenanalyse' - ] - }, - { - period: '08/2022 - 01/2023', - company: 'Magnarius', - title: 'RPA Developer & E-Commerce Manager', - location: 'Bergisch Gladbach', - highlights: [ - 'Shopware 6 Entwicklung und JTL-Integration', - 'Google Ads Automatisierung', - 'CMS-Management und -Optimierung', - 'SEO-Strategieumsetzung' - ] - } - ] - } -} as const; -// Type für Typsicherheit -export type JourneyTranslations = typeof journey; diff --git a/src/i18n/locales-old/de/pages/about/schema.ts b/src/i18n/locales-old/de/pages/about/schema.ts deleted file mode 100644 index f78b345..0000000 --- a/src/i18n/locales-old/de/pages/about/schema.ts +++ /dev/null @@ -1,31 +0,0 @@ -export const schema = { - page: { - name: 'Über Damjan Savić', - description: 'Erfahren Sie mehr über Damjan Savić, einen zertifizierten JTL-Experten mit umfassender Erfahrung in E-Commerce und Warenwirtschaftslösungen.' - }, - person: { - jobTitle: 'JTL Integrations-Experte', - description: 'Mit umfangreicher Erfahrung in der Integration und Optimierung von E-Commerce-Systemen unterstütze ich Unternehmen bei der digitalen Transformation ihrer Geschäftsprozesse.', - languages: { - english: 'Englisch', - serbian: 'Serbisch', - german: 'Deutsch', - french: 'Französisch', - spanish: 'Spanisch', - russian: 'Russisch' - }, - skills: { - python: 'Python', - googleAds: 'Google Ads', - metaAds: 'Meta Ads', - shopware: 'Shopware', - shopify: 'Shopify', - wooCommerce: 'WooCommerce', - jtlWawi: 'JTL WAWI', - serverAdmin: 'Server-Administration', - airflow: 'AirFlow' - } - } -} as const; -// Type für Typsicherheit -export type SchemaTranslations = typeof schema; diff --git a/src/i18n/locales-old/de/pages/about/skillbar.ts b/src/i18n/locales-old/de/pages/about/skillbar.ts deleted file mode 100644 index deb3f12..0000000 --- a/src/i18n/locales-old/de/pages/about/skillbar.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const skillbar = { - // Accessibility labels - ariaLabel: { - skillLevel: 'Fähigkeitsniveau', - progressBar: 'Fortschrittsbalken' - }, - // Screen reader text - screenReader: { - progress: '{{level}} Prozent Fortschritt für {{skill}}' - } -} as const; -// Type für Typsicherheit -export type SkillBarTranslations = typeof skillbar; diff --git a/src/i18n/locales-old/de/pages/about/skillgroup.ts b/src/i18n/locales-old/de/pages/about/skillgroup.ts deleted file mode 100644 index 8eb6299..0000000 --- a/src/i18n/locales-old/de/pages/about/skillgroup.ts +++ /dev/null @@ -1,63 +0,0 @@ -export const skillgroup = { - // Kategorien - categories: { - development: 'Entwicklung', - ecommerce: 'E-Commerce', - marketing: 'Marketing', - automation: 'Automatisierung', - languages: 'Programmiersprachen', - databases: 'Datenbanken' - }, - // Skills nach Kategorien - skills: { - development: { - frontend: 'Frontend-Entwicklung', - backend: 'Backend-Entwicklung', - fullstack: 'Full-Stack-Entwicklung', - api: 'API-Entwicklung', - testing: 'Software-Testing' - }, - ecommerce: { - jtl: 'JTL WaWi', - shopware: 'Shopware', - shopify: 'Shopify', - woocommerce: 'WooCommerce', - magento: 'Magento' - }, - marketing: { - seo: 'Suchmaschinenoptimierung', - sea: 'Suchmaschinenwerbung', - analytics: 'Web-Analyse', - googleAds: 'Google Ads', - metaAds: 'Meta Ads' - }, - automation: { - rpa: 'Robotergestützte Prozessautomatisierung', - workflow: 'Workflow-Automatisierung', - cicd: 'CI/CD', - testing: 'Test-Automatisierung', - deployment: 'Deployment-Automatisierung' - }, - languages: { - python: 'Python', - javascript: 'JavaScript', - typescript: 'TypeScript', - php: 'PHP', - sql: 'SQL' - }, - databases: { - mysql: 'MySQL', - postgresql: 'PostgreSQL', - mongodb: 'MongoDB', - redis: 'Redis', - elasticsearch: 'Elasticsearch' - } - }, - // Accessibility - ariaLabels: { - skillGroup: 'Fähigkeitsgruppe', - skillList: 'Liste der Fähigkeiten in dieser Kategorie' - } -} as const; -// Type für Typsicherheit -export type SkillGroupTranslations = typeof skillgroup; diff --git a/src/i18n/locales-old/de/pages/about/skills.ts b/src/i18n/locales-old/de/pages/about/skills.ts deleted file mode 100644 index c87b087..0000000 --- a/src/i18n/locales-old/de/pages/about/skills.ts +++ /dev/null @@ -1,46 +0,0 @@ -// de/pages/about/skills.ts -export const skills = { - title: 'Fähigkeiten', - skillGroups: [ - { - category: 'Entwicklung', - items: [ - { name: 'Python', level: 90 }, - { name: 'Google Ads', level: 85 }, - { name: 'Meta Ads', level: 85 } - ] - }, - { - category: 'E-Commerce', - items: [ - { name: 'Shopware', level: 85 }, - { name: 'Shopify', level: 85 }, - { name: 'WooCommerce', level: 85 } - ] - }, - { - category: 'Systemadministration', - items: [ - { name: 'JTL WAWI', level: 85 }, - { name: 'Server', level: 75 }, - { name: 'AirFlow', level: 60 } - ] - } - ], - ui: { - percentage: 'Prozent', - levelLabel: 'Niveau', - skillLevel: '{{level}}% Beherrschung in {{skill}}' - }, - aria: { - skillGroup: 'Fähigkeitsgruppe für {{category}}', - skillBar: 'Fortschrittsbalken für {{skill}}', - skillIcon: 'Symbol für {{category}}', - selectSkill: 'Fähigkeit auswählen' - }, - screenReader: { - skillProgress: '{{skill}} mit einem Niveau von {{level}} Prozent' - } -} as const; - -export type SkillsTranslations = typeof skills; diff --git a/src/i18n/locales-old/de/pages/about/workflow.ts b/src/i18n/locales-old/de/pages/about/workflow.ts deleted file mode 100644 index 90dd5fa..0000000 --- a/src/i18n/locales-old/de/pages/about/workflow.ts +++ /dev/null @@ -1,44 +0,0 @@ -export const workflow = { - // Seitentitel - title: 'MEIN WORKFLOW', - description: 'Systematischer Ansatz zur Softwareentwicklung durch definierte Schritte', - // Workflow-Schritte - steps: [ - { - number: '01', - title: 'ANFORDERUNGSANALYSE' - }, - { - number: '02', - title: 'ABFRAGE VON DEADLINES UND EINSCHRÄNKUNGEN' - }, - { - number: '03', - title: 'EINRICHTUNG DER ENTWICKLUNGSUMGEBUNG' - }, - { - number: '04', - title: 'PROGRAMMIERUNG' - }, - { - number: '05', - title: 'TESTEN DER ERGEBNISSE' - }, - { - number: '06', - title: 'SUPPORT UND SKALIERUNG DES CODES' - } - ], - // Aria Labels für Barrierefreiheit - aria: { - workflowSection: 'Workflow-Prozess', - stepNumber: 'Schritt {{number}}', - stepDescription: 'Workflow-Schritt: {{title}}' - }, - // Screen Reader Texte - screenReader: { - stepProgress: 'Schritt {{number}} von {{total}}: {{title}}' - } -} as const; -// Type für Typsicherheit -export type WorkflowTranslations = typeof workflow; \ No newline at end of file diff --git a/src/i18n/locales-old/de/pages/contact/contactform.ts b/src/i18n/locales-old/de/pages/contact/contactform.ts deleted file mode 100644 index c482cba..0000000 --- a/src/i18n/locales-old/de/pages/contact/contactform.ts +++ /dev/null @@ -1,39 +0,0 @@ -export const contactform = { - // Formular Header - title: 'Kontaktieren Sie mich', - description: 'Haben Sie Fragen oder möchten Sie zusammenarbeiten? Schreiben Sie mir eine Nachricht.', - // Formularfelder - name: { - label: 'Name', - placeholder: 'Ihr vollständiger Name' - }, - email: { - label: 'E-Mail', - placeholder: 'ihre.email@beispiel.de' - }, - message: { - label: 'Nachricht', - placeholder: 'Ihre Nachricht an mich...' - }, - // Button - submit: 'Nachricht senden', - // Statusmeldungen - successMessage: 'Vielen Dank für Ihre Nachricht! Ich werde mich so schnell wie möglich bei Ihnen melden.', - errorMessage: 'Entschuldigung, beim Senden Ihrer Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.', - // Fehlermeldungen - errors: { - nameRequired: 'Bitte geben Sie Ihren Namen ein', - emailRequired: 'Bitte geben Sie Ihre E-Mail-Adresse ein', - emailInvalid: 'Bitte geben Sie eine gültige E-Mail-Adresse ein', - messageRequired: 'Bitte geben Sie eine Nachricht ein' - }, - // Aria Labels - aria: { - form: 'Kontaktformular', - submitting: 'Formular wird gesendet', - successAlert: 'Erfolgsmeldung', - errorAlert: 'Fehlermeldung' - } -} as const; -// Type für Typsicherheit -export type ContactFormTranslations = typeof contactform; diff --git a/src/i18n/locales-old/de/pages/contact/contactinfo.ts b/src/i18n/locales-old/de/pages/contact/contactinfo.ts deleted file mode 100644 index aaa37e8..0000000 --- a/src/i18n/locales-old/de/pages/contact/contactinfo.ts +++ /dev/null @@ -1,25 +0,0 @@ -export const contactinfo = { - // Header - title: 'Kontaktinformationen', - description: 'Sie können mich über folgende Wege erreichen', - // Kontaktmethoden Labels - addressLabel: 'Bürostandort', - phoneLabel: 'Telefon', - emailLabel: 'E-Mail', - // Kontaktinformationen - address: 'Rotdornallee, Köln', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - // Zusätzliche Informationen - availabilityNote: 'Geschäftszeiten: Montag bis Freitag, 9:00 - 17:00 Uhr', - // Aria Labels - aria: { - contactCard: 'Kontaktinformationskarte', - addressLink: 'Öffne Standort in Google Maps', - phoneLink: 'Anrufen', - emailLink: 'E-Mail senden', - externalLink: 'Öffnet in neuem Tab' - } -} as const; -// Type für Typsicherheit -export type ContactInfoTranslations = typeof contactinfo; diff --git a/src/i18n/locales-old/de/pages/contact/index.ts b/src/i18n/locales-old/de/pages/contact/index.ts deleted file mode 100644 index 7d76f01..0000000 --- a/src/i18n/locales-old/de/pages/contact/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -// src/i18n/locales/de/pages/contact/index.ts -export const contact = { - breadcrumb: "KONTAKT", - hero: { - title: "Lassen Sie uns zusammenarbeiten", - subtitle: "Sie haben ein Projekt im Sinn? Lassen Sie uns besprechen, wie wir Ihnen bei der Erreichung Ihrer Ziele helfen können." - }, - contactInfo: { - title: "Kontaktinformationen", - description: "Sie können mich über folgende Wege erreichen", - address: { - label: "Bürostandort", - value: "Rotdornallee, Köln" - }, - phone: { - label: "Telefon", - value: "+49 175 695 0979" - }, - email: { - label: "E-Mail", - value: "info@damjan-savic.com" - }, - availabilityNote: "Geschäftszeiten: Montag bis Freitag, 9:00 - 17:00 Uhr", - aria: { - contactCard: "Kontaktinformationskarte", - addressLink: "Öffne Standort in Google Maps", - phoneLink: "Anrufen", - emailLink: "E-Mail senden", - externalLink: "Öffnet in neuem Tab" - } - }, - contactForm: { - title: "Kontaktieren Sie mich", - description: "Haben Sie Fragen oder möchten Sie zusammenarbeiten? Schreiben Sie mir eine Nachricht.", - name: { - label: "Name", - placeholder: "Ihr vollständiger Name" - }, - email: { - label: "E-Mail", - placeholder: "ihre.email@beispiel.de" - }, - message: { - label: "Nachricht", - placeholder: "Ihre Nachricht an mich..." - }, - submit: "Nachricht senden", - successMessage: "Vielen Dank für Ihre Nachricht! Ich werde mich so schnell wie möglich bei Ihnen melden.", - errorMessage: "Entschuldigung, beim Senden Ihrer Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", - errors: { - nameRequired: "Bitte geben Sie Ihren Namen ein", - emailRequired: "Bitte geben Sie Ihre E-Mail-Adresse ein", - emailInvalid: "Bitte geben Sie eine gültige E-Mail-Adresse ein", - messageRequired: "Bitte geben Sie eine Nachricht ein" - }, - aria: { - form: "Kontaktformular", - submitting: "Formular wird gesendet", - successAlert: "Erfolgsmeldung", - errorAlert: "Fehlermeldung" - } - } -} as const; - -export type ContactTranslations = typeof contact; - -export default { - pages: { - contact: contact - } -}; \ No newline at end of file diff --git a/src/i18n/locales-old/de/pages/dashboard.ts b/src/i18n/locales-old/de/pages/dashboard.ts deleted file mode 100644 index 66a5f8c..0000000 --- a/src/i18n/locales-old/de/pages/dashboard.ts +++ /dev/null @@ -1,76 +0,0 @@ -// src/i18n/locales/de/pages/dashboard.ts -export const dashboard = { - // SEO - seo: { - title: 'Analytics Dashboard', - description: 'Website-Analysedashboard' - }, - // Hauptüberschriften - header: { - title: 'Analytics Dashboard', - activeUsers: 'aktive Nutzer' - }, - // Metrikkarten - metrics: { - pageViews: { - title: 'Seitenaufrufe', - perMinute: 'pro Minute' - }, - uniqueVisitors: { - title: 'Eindeutige Besucher', - currentlyActive: 'aktuell aktiv' - }, - conversions: { - title: 'Konversionen', - rate: 'Konversionsrate' - }, - timeOnSite: { - title: 'Durchschn. Besuchszeit', - bounceRate: 'Absprungrate' - } - }, - // Top-Seiten Bereich - topPages: { - title: 'Top-Seiten', - columns: { - path: 'Pfad', - views: 'Aufrufe', - change: 'Änderung' - } - }, - // Event-Tracking Bereich - events: { - title: 'Event-Tracking', - types: { - contactForm: 'Kontaktformular Absendung', - portfolioView: 'Portfolio Ansicht', - cvDownload: 'Lebenslauf Download', - blogRead: 'Blog Gelesen' - } - }, - // Statusmeldungen - status: { - loading: 'Lade Dashboard...', - error: 'Fehler beim Laden der Daten', - notAuthenticated: 'Bitte melden Sie sich an' - }, - // Sonstiges - misc: { - viewMore: 'Mehr anzeigen', - refresh: 'Aktualisieren', - period: { - today: 'Heute', - yesterday: 'Gestern', - last7Days: 'Letzte 7 Tage', - last30Days: 'Letzte 30 Tage', - thisMonth: 'Dieser Monat', - lastMonth: 'Letzter Monat' - } - }, - // Trends und Änderungen - trends: { - increase: 'Zunahme', - decrease: 'Abnahme', - noChange: 'Keine Änderung' - } -}; diff --git a/src/i18n/locales-old/de/pages/home/about.ts b/src/i18n/locales-old/de/pages/home/about.ts deleted file mode 100644 index 49a3b1f..0000000 --- a/src/i18n/locales-old/de/pages/home/about.ts +++ /dev/null @@ -1,15 +0,0 @@ -// src/i18n/locales/de/pages/home/about.ts -export const about = { - title: 'Über Damjan Savić - Senior Fullstack Entwickler & Digital Solutions Consultant', - content: 'Damjan Savić ist AI & Automation Specialist mit Fokus auf Voice AI, autonome Agenten und Prozessautomatisierung. Mit einem M.A. in Software Development und über 7 Jahren Erfahrung in der Entwicklung digitaler Lösungen verbindet er technische Expertise mit strategischem Geschäftsverständnis.\n' + - 'Aktuell entwickelt er bei Everlast Consulting GmbH KI-Agenten mit n8n und Voice-AI-Lösungen.\n' + - 'Seine Spezialisierung umfasst die Integration von GPT-4 und Claude API in Produktions-Workflows, Middleware-Entwicklung für ERP-Systeme wie Apparel Magic und JTL, sowie RFID/IoT-Automatisierung mit Zebra-Hardware. Von der Systemintegration über API-Entwicklung bis zur Fullstack-Implementierung mit Python, TypeScript und React/Next.js liefert er pragmatische Lösungen für komplexe Geschäftsanforderungen.', - image: { - alt: 'Damjan Savić - Senior Fullstack Entwickler & Digital Solutions Consultant Köln | Software Architect | Cloud Expert | KI-Spezialist' - }, - buttons: { - learnMore: 'Mehr erfahren', - downloadCV: 'CV herunterladen' - } -} as const; -export type AboutTranslations = typeof about; diff --git a/src/i18n/locales-old/de/pages/home/experience.ts b/src/i18n/locales-old/de/pages/home/experience.ts deleted file mode 100644 index cdb7dde..0000000 --- a/src/i18n/locales-old/de/pages/home/experience.ts +++ /dev/null @@ -1,86 +0,0 @@ -// src/i18n/locales/de/pages/home/experience.ts -export const experience = { - title: 'Berufserfahrung', - navigation: { - prev: '←', - next: '→' - }, - positions: [ - { - role: 'Process Automation Specialist', - company: 'Everlast Consulting GmbH', - period: '12/2024 - HEUTE', - highlights: [ - 'Entwicklung von KI-Agenten mit n8n und Zapier', - 'Aufbau von Web-Scraping-Lösungen', - 'Migration von Power Automate zu n8n' - ] - }, - { - role: 'Consultant Digital Solutions', - company: 'Ritter Digital GmbH', - period: '08/2023 - 11/2024', - highlights: [ - 'Backend-Services auf dedizierten Servern', - 'KI-Integration via Power Automate', - 'RFID/IoT-Lösungen mit Zebra-Hardware' - ] - }, - { - role: 'ERP-Integrationsspezialist & E-Commerce-Entwickler', - company: 'Joyce & Girls', - period: '01/2023 - 08/2023', - highlights: [ - 'ApparelMagic & TradeByte Integration', - 'MariaDB Middleware-Entwicklung', - 'Windows Server Administration', - 'Shopify-Optimierung' - ] - }, - { - role: 'RPA Developer & E-Commerce Manager', - company: 'C&S Marketing', - period: '08/2022 - 01/2023', - highlights: [ - 'Shopware 6 & JTL Integration', - 'Python Automatisierung', - 'Google Ads Optimierung', - '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', - 'Produktfotografie', - 'Sales im Luxusuhrensegment', - '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', - 'Veranstaltungsorganisation', - 'Marketing Automation' - ] - } - ] -} as const; -export type ExperienceTranslations = typeof experience; diff --git a/src/i18n/locales-old/de/pages/home/expertise.ts b/src/i18n/locales-old/de/pages/home/expertise.ts deleted file mode 100644 index e7a79a8..0000000 --- a/src/i18n/locales-old/de/pages/home/expertise.ts +++ /dev/null @@ -1,27 +0,0 @@ -// src/i18n/locales/de/pages/home/expertise.ts -export const expertise = { - title: 'Bereiche meiner Expertise', - areas: [ - { - title: 'ERP Integration', - description: 'Expert für JTL-Wawi Implementierung, Konfiguration und Optimierung. Spezialisiert auf Warenwirtschaftssysteme und POS-Integration.', - skills: ['JTL-Wawi', 'JTL-WMS', 'JTL-POS', 'Apparel Magic'] - }, - { - title: 'Entwicklung', - description: 'Full-Stack Entwicklung mit Fokus auf Python-Automatisierung, React Frontends und Datenbankdesign.', - skills: ['Python', 'React/Next.js', 'MariaDB', 'Docker'] - }, - { - title: 'E-Commerce', - description: 'Umfangreiche Erfahrung mit verschiedenen E-Commerce-Plattformen und Marktplatz-Integrationen.', - skills: ['Shopify', 'Shopware', 'WooCommerce', 'API Integration'] - }, - { - title: 'Digitales Marketing', - description: 'Strategischer Ansatz im digitalen Marketing mit Fokus auf Automatisierung und Analyse.', - skills: ['Google Ads', 'Meta Ads', 'SEO', 'Analytics'] - } - ] -} as const; -export type ExpertiseTranslations = typeof expertise; diff --git a/src/i18n/locales-old/de/pages/home/hero.ts b/src/i18n/locales-old/de/pages/home/hero.ts deleted file mode 100644 index 77a6038..0000000 --- a/src/i18n/locales-old/de/pages/home/hero.ts +++ /dev/null @@ -1,32 +0,0 @@ -// src/i18n/locales/de/pages/home/hero.ts -export const hero = { - title: 'AI & AUTOMATION SPECIALIST', - name: 'DAMJAN SAVIĆ', - subtitle: 'KI-AGENTEN | VOICE AI | PROZESSAUTOMATISIERUNG', - description: 'Entwicklung von KI-Agenten und Automatisierungslösungen. Von Voice-AI-Plattformen bis zu autonomen Web-Agenten.', - currentRole: 'Aktuell @ Everlast Consulting GmbH', - cta: 'KONTAKT AUFNEHMEN', - image: { - alt: 'Damjan Savić - AI & Automation Specialist | KI-Agenten, Voice AI & Prozessautomatisierung' - }, - social: { - getInTouch: 'Kontaktieren Sie Damjan Savić', - linkedin: { - title: 'LinkedIn Profil von Damjan Savić besuchen' - }, - github: { - title: 'GitHub Profil von Damjan Savić besuchen' - }, - email: { - title: 'E-Mail an Damjan Savić senden' - } - }, - navigation: { - experience: 'ERFAHRUNG', - skills: 'FÄHIGKEITEN', - projects: 'PROJEKTE', - about: 'ÜBER MICH' - } -} as const; - -export type HeroTranslations = typeof hero; \ No newline at end of file diff --git a/src/i18n/locales-old/de/pages/home/index.ts b/src/i18n/locales-old/de/pages/home/index.ts deleted file mode 100644 index b35be08..0000000 --- a/src/i18n/locales-old/de/pages/home/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -// 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; \ No newline at end of file diff --git a/src/i18n/locales-old/de/pages/home/projects.ts b/src/i18n/locales-old/de/pages/home/projects.ts deleted file mode 100644 index df3dc31..0000000 --- a/src/i18n/locales-old/de/pages/home/projects.ts +++ /dev/null @@ -1,10 +0,0 @@ -// src/i18n/locales/de/pages/home/projects.ts -export const projects = { - title: 'Portfolio', - viewAll: 'Alle Projekte →', - loading: 'Projekte werden geladen...', - error: { - loading: 'Fehler beim Laden der Projekte' - } -} as const; -export type ProjectsTranslations = typeof projects; diff --git a/src/i18n/locales-old/de/pages/home/skills.ts b/src/i18n/locales-old/de/pages/home/skills.ts deleted file mode 100644 index 0d42fe2..0000000 --- a/src/i18n/locales-old/de/pages/home/skills.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/de/pages/home/skills.ts -export const skills = { - title: 'Fähigkeiten', - 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: 'Datenbank', - level: 85, - description: 'PostgreSQL, Supabase, MariaDB' - }, - { - name: 'DevOps', - level: 75, - description: 'Docker, Vercel, Dedicated Servers' - } - ], - aria: { - skillLevel: 'Fähigkeitsniveau', - selectSkill: 'Fähigkeit auswählen' - } -} as const; -export type SkillsTranslations = typeof skills; diff --git a/src/i18n/locales-old/de/pages/login.ts b/src/i18n/locales-old/de/pages/login.ts deleted file mode 100644 index 5b36150..0000000 --- a/src/i18n/locales-old/de/pages/login.ts +++ /dev/null @@ -1,54 +0,0 @@ -// src/i18n/locales/de/pages/login.ts -export const login = { - // SEO - seo: { - title: 'Login', - description: 'Anmelden für Zugriff auf das Dashboard' - }, - // Hauptüberschrift - header: { - title: 'Im Dashboard anmelden' - }, - // Formular - form: { - // Felder - email: { - label: 'E-Mail-Adresse', - placeholder: 'ihre.email@beispiel.de' - }, - password: { - label: 'Passwort', - placeholder: 'Ihr Passwort' - }, - // Buttons - submit: { - default: 'Anmelden', - loading: 'Anmeldung läuft...' - }, - // Fehlermeldungen - errors: { - default: 'Ein Fehler ist aufgetreten', - invalidCredentials: 'Ungültige Anmeldedaten', - emailRequired: 'Bitte geben Sie Ihre E-Mail-Adresse ein', - passwordRequired: 'Bitte geben Sie Ihr Passwort ein', - emailInvalid: 'Bitte geben Sie eine gültige E-Mail-Adresse ein' - } - }, - // Links und Hilfe - help: { - forgotPassword: 'Passwort vergessen?', - needHelp: 'Benötigen Sie Hilfe?', - contactSupport: 'Support kontaktieren' - }, - // Statusmeldungen - status: { - authenticating: 'Authentifizierung...', - success: 'Erfolgreich angemeldet', - redirecting: 'Weiterleitung zum Dashboard...' - }, - // Sicherheitshinweise - security: { - secureConnection: 'Sichere Verbindung', - privacyNote: 'Ihre Daten werden verschlüsselt übertragen' - } -}; diff --git a/src/i18n/locales-old/de/pages/notfound.ts b/src/i18n/locales-old/de/pages/notfound.ts deleted file mode 100644 index f0e28bf..0000000 --- a/src/i18n/locales-old/de/pages/notfound.ts +++ /dev/null @@ -1,19 +0,0 @@ -// src/i18n/locales/de/pages/notfound.ts -export const notfound = { - // SEO - seo: { - title: '404 - Seite nicht gefunden', - description: 'Die gesuchte Seite existiert nicht.' - }, - // Hauptinhalt - content: { - errorCode: '404', - title: 'Seite nicht gefunden', - description: 'Die gesuchte Seite existiert nicht oder wurde verschoben.', - }, - // Aktionsbuttons - actions: { - goBack: 'Zurück', - homePage: 'Startseite' - } -}; diff --git a/src/i18n/locales-old/de/pages/portfolio.ts b/src/i18n/locales-old/de/pages/portfolio.ts deleted file mode 100644 index 384be33..0000000 --- a/src/i18n/locales-old/de/pages/portfolio.ts +++ /dev/null @@ -1,117 +0,0 @@ -// src/i18n/locales/de/pages/portfolio.ts -export const portfolio = { - // SEO und Meta-Informationen - seo: { - title: 'Portfolio - Damjan Savić', - description: 'Entdecken Sie meine Projekte im Bereich JTL-Integration, E-Commerce und Digitale Transformation.' - }, - // Hauptseite - main: { - title: 'Portfolio', - loading: 'Projekte werden geladen...', - error: 'Fehler beim Laden der Projekte', - noProjects: { - title: 'Keine Projekte gefunden', - description: 'Aktuell sind keine Projekte verfügbar. Schauen Sie später wieder vorbei.' - } - }, - // Projekt-Karten - projectCard: { - date: 'Datum', - technologies: 'Technologien', - moreCount: 'weitere', // für '+X weitere' - readMore: 'Mehr erfahren' - }, - // Projekt-Details - project: { - loading: 'Projekt wird geladen...', - backToPortfolio: 'Zurück zum Portfolio', - notFound: { - title: 'Projekt nicht gefunden', - description: 'Das angeforderte Projekt konnte nicht gefunden werden.' - }, - navigation: { - back: 'Zurück zum Portfolio', - projectDetails: 'PROJEKT DETAILS' - }, - metadata: { - date: 'Datum', - client: 'Kunde', - duration: 'Dauer', - repository: 'Repository', - documentation: 'Dokumentation', - technologies: 'Technologien', - live: 'Live-Version' - }, - sections: { - overview: 'Überblick', - challenge: 'Herausforderung', - solution: 'Lösung', - results: 'Ergebnisse', - systemArchitecture: 'Systemarchitektur', - implementation: 'Implementierung', - technologies: 'Verwendete Technologien' - } - }, - // Kategorien und Filter - categories: { - all: 'Alle', - 'Data Science': 'Data Science', - 'AI Development': 'KI-Entwicklung', - 'Integration': 'Integration', - 'Full-Stack Development': 'Full-Stack Entwicklung', - 'Data Processing': 'Datenverarbeitung', - 'Content Production': 'Content-Produktion', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automatisierung' - }, - // Spezifische Projekte - projects: { - 'ai-data-reader': { - title: 'KI-basierte Produktdatenpflege aus PDF-Dateien', - description: 'Entwicklung eines automatisierten Systems zur Extraktion und Strukturierung von Produktdaten aus PDF-Dokumenten' - }, - 'bi-vision': { - title: 'KI-Videos für BI-Software', - description: 'Entwicklung von KI-gestützten Erklärvideos für Business Intelligence Dashboards' - }, - 'business-intelligence-ai': { - title: 'KI für Business Intelligence', - description: 'Integration von KI-Modellen in Business Intelligence Systeme zur Prozessoptimierung' - }, - 'claude-personal-assistant': { - title: 'KI-basierter Personal Assistant mit Claude AI', - description: 'Entwicklung eines personalisierten KI-Assistenten für professionelle E-Mail-Kommunikation' - }, - 'e-commerce-integration': { - title: 'Integration mit TradeByte', - description: 'Integration eines Shopify-Shops mit JTL-WaWi für optimierte Bestandsführung' - }, - 'jtl-integration-project': { - title: 'JTL Integration Referenzprojekt', - description: 'Ein vollständiges Lagersystem in Krefeld auf Basis von JTL' - }, - 'local-llm-training': { - title: 'Training von lokalen KI-Modellen', - description: 'Entwicklung einer Pipeline für das Training und die Feinabstimmung lokaler KI-Modelle' - }, - 'processautomation': { - title: 'Automatisierung mit Python', - description: 'Entwicklung von Automatisierungslösungen für Geschäftsprozesse' - }, - 'rfid-automation': { - title: 'RFID-Automatisierung', - description: 'Entwicklung eines automatisierten Systems zur Erstellung und zum Druck von RFID-Etiketten' - }, - 'timetracking-software': { - title: 'Digitale Zeiterfassung', - description: 'Entwicklung einer modernen Zeiterfassungslösung mit Next.js, Flask und MSSQL' - } - }, - // Status-Meldungen - status: { - loading: 'Wird geladen...', - error: 'Ein Fehler ist aufgetreten', - success: 'Erfolgreich geladen' - } -}; diff --git a/src/i18n/locales-old/de/pages/privacy.ts b/src/i18n/locales-old/de/pages/privacy.ts deleted file mode 100644 index 894b5d4..0000000 --- a/src/i18n/locales-old/de/pages/privacy.ts +++ /dev/null @@ -1,96 +0,0 @@ -// src/i18n/locales/de/pages/privacy.ts -export const privacy = { - // SEO und Schema - seo: { - title: 'Datenschutzerklärung', - description: 'Datenschutzerklärung für die Portfolio-Website von Damjan Savić' - }, - schema: { - name: 'Datenschutzerklärung', - description: 'Datenschutzerklärung für die Portfolio-Website von Damjan Savić' - }, - // Hauptinhalt - content: { - title: 'Datenschutzerklärung', - lastUpdated: 'Zuletzt aktualisiert: 10. März 2024', - // Navigation - breadcrumbs: { - currentTitle: 'Datenschutzerklärung' - }, - // Abschnitte - sections: { - introduction: { - title: '1. Einführung', - content: 'Diese Datenschutzerklärung erläutert, wie wir Ihre personenbezogenen Daten bei der Nutzung unserer Website erfassen, verwenden und schützen.' - }, - dataCollection: { - title: '2. Datenerfassung', - providedInfo: { - title: '2.1 Von Ihnen bereitgestellte Informationen', - intro: 'Bei Verwendung unseres Kontaktformulars erfassen wir:', - items: [ - 'Name', - 'E-Mail-Adresse', - 'Nachrichteninhalt' - ] - }, - automaticInfo: { - title: '2.2 Automatisch erfasste Informationen', - intro: 'Wir erfassen automatisch:', - items: [ - 'IP-Adresse', - 'Browser-Typ', - 'Geräteinformationen', - 'Besuchte Seiten', - 'Verweildauer auf der Website' - ] - } - }, - dataUsage: { - title: '3. Verwendung Ihrer Daten', - intro: 'Wir verwenden Ihre Daten für:', - items: [ - 'Beantwortung Ihrer Anfragen', - 'Verbesserung unserer Website', - 'Analyse von Nutzungsmustern', - 'Betrugsprävention' - ] - }, - cookies: { - title: '4. Cookies', - intro: 'Wir verwenden Cookies für:', - items: [ - 'Speicherung Ihrer Präferenzen', - 'Analyse des Website-Verkehrs', - 'Verständnis des Nutzerverhaltens' - ] - }, - security: { - title: '5. Datensicherheit', - intro: 'Wir implementieren geeignete Sicherheitsmaßnahmen zum Schutz Ihrer personenbezogenen Daten, einschließlich:', - items: [ - 'Verschlüsselung der Datenübertragung', - 'Regelmäßige Sicherheitsbewertungen', - 'Zugriffskontrollen', - 'Sichere Datenspeicherung' - ] - }, - rights: { - title: '6. Ihre Rechte', - intro: 'Sie haben das Recht auf:', - items: [ - 'Zugriff auf Ihre personenbezogenen Daten', - 'Berichtigung der Daten', - 'Löschung der Daten', - 'Widerspruch gegen die Datenverarbeitung', - 'Datenübertragbarkeit' - ] - }, - contact: { - title: '7. Kontaktinformationen', - intro: 'Für datenschutzbezogene Anfragen kontaktieren Sie uns unter:', - email: 'E-Mail: privacy@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/de/pages/terms.ts b/src/i18n/locales-old/de/pages/terms.ts deleted file mode 100644 index dc9e25c..0000000 --- a/src/i18n/locales-old/de/pages/terms.ts +++ /dev/null @@ -1,59 +0,0 @@ -// src/i18n/locales/de/pages/terms.ts -export const terms = { - // SEO und Schema - seo: { - title: 'Allgemeine Geschäftsbedingungen', - description: 'Allgemeine Geschäftsbedingungen für die Portfolio-Website von Damjan Savić' - }, - schema: { - name: 'Allgemeine Geschäftsbedingungen', - description: 'Allgemeine Geschäftsbedingungen für die Portfolio-Website von Damjan Savić' - }, - // Hauptinhalt - content: { - title: 'Allgemeine Geschäftsbedingungen', - lastUpdated: 'Zuletzt aktualisiert: 10. März 2024', - // Navigation - breadcrumbs: { - currentTitle: 'Allgemeine Geschäftsbedingungen' - }, - // Abschnitte - sections: { - agreement: { - title: '1. Zustimmung zu den Bedingungen', - content: 'Mit dem Zugriff auf unsere Website stimmen Sie zu, an diese Allgemeinen Geschäftsbedingungen gebunden zu sein und alle geltenden Gesetze und Vorschriften einzuhalten.' - }, - intellectualProperty: { - title: '2. Rechte an geistigem Eigentum', - content: 'Alle Inhalte dieser Website, einschließlich, aber nicht beschränkt auf Texte, Grafiken, Logos, Bilder und Software, sind Eigentum von Damjan Savić und durch Gesetze zum Schutz geistigen Eigentums geschützt.' - }, - userResponsibilities: { - title: '3. Nutzerverantwortlichkeiten', - intro: 'Bei der Nutzung unserer Website stimmen Sie zu:', - items: [ - 'Korrekte Informationen bereitzustellen', - 'Die Website legal und ethisch zu nutzen', - 'Keinen unbefugten Zugriff zu versuchen', - 'Den Betrieb der Website nicht zu stören' - ] - }, - liability: { - title: '4. Haftungsbeschränkung', - content: 'Wir haften nicht für indirekte, zufällige, besondere, Folge- oder Strafschäden, die sich aus Ihrer Nutzung oder Unfähigkeit zur Nutzung der Website ergeben.' - }, - changes: { - title: '5. Änderungen der Bedingungen', - content: 'Wir behalten uns das Recht vor, diese Bedingungen jederzeit zu ändern. Wir werden die Nutzer über wesentliche Änderungen informieren, indem wir die neuen Allgemeinen Geschäftsbedingungen auf dieser Seite veröffentlichen.' - }, - governingLaw: { - title: '6. Geltendes Recht', - content: 'Diese Bedingungen unterliegen den Gesetzen der Bundesrepublik Deutschland und werden in Übereinstimmung mit diesen ausgelegt, ohne Berücksichtigung von Kollisionsnormen.' - }, - contact: { - title: '7. Kontaktinformationen', - intro: 'Bei Fragen zu diesen Allgemeinen Geschäftsbedingungen kontaktieren Sie uns bitte unter:', - email: 'E-Mail: legal@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/de/portfolio/index.ts b/src/i18n/locales-old/de/portfolio/index.ts deleted file mode 100644 index 2a62f96..0000000 --- a/src/i18n/locales-old/de/portfolio/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -// src/i18n/locales/de/portfolio/index.ts -import aiDataReader from './projects/ai-data-reader'; -import kamenpro from './projects/kamenpro'; -import smartWarehouse from './projects/smart-warehouse'; -import powerPlatformGovernance from './projects/power-platform-governance'; -import websiteMitKi from './projects/website-mit-ki'; -import aiMusicProduction from './projects/ai-music-production'; -import automatedAdCreatives from './projects/automated-ad-creatives'; -import cursorIde from './projects/cursor-ide'; -export const portfolio = { - // Meta-Informationen für die Portfolio-Seite - seo: { - title: 'Portfolio - Fullstack Entwickler Köln Damjan Savić | Python & React Projekte', - description: 'Portfolio von Freelance Developer Köln Damjan Savić: Python Automatisierung, OLLAMA KI Integration, ERP System Integration, E-Commerce Entwicklung. Custom Software Entwicklung Köln für B2B Enterprise.' - }, - // Portfolio-Überschriften und Filter - sections: { - title: 'Software Entwickler Köln - Portfolio Damjan Savić', - subtitle: 'Python Entwickler Köln & React Developer - Erfolgreiche Projekte', - filterTitle: 'Kategorien', - sortTitle: 'Sortierung' - }, - // Filter-Optionen - filters: { - all: 'Alle', - categories: { - 'Data Science': 'Data Science', - 'AI Development': 'KI-Entwicklung', - 'Integration': 'Integration', - 'Full-Stack Development': 'Full-Stack Entwicklung', - 'Data Processing': 'Datenverarbeitung', - 'Content Production': 'Content-Produktion', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automatisierung', - 'Web Development': 'Webentwicklung', - 'AI & Automation': 'KI & Automatisierung', - 'Enterprise Software': 'Enterprise Software' - } - }, - // Sortier-Optionen - sort: { - date: 'Datum', - title: 'Titel', - category: 'Kategorie' - }, - // UI-Texte - ui: { - loading: 'Projekte werden geladen...', - noProjects: 'Keine Projekte gefunden', - viewProject: 'Projekt ansehen', - backToPortfolio: 'Zurück zum Portfolio', - technologies: 'Technologien', - client: 'Kunde', - duration: 'Dauer', - visitWebsite: 'Website besuchen', - viewRepository: 'Repository ansehen', - viewDocumentation: 'Dokumentation' - }, - // Alle Projekte - projects: { - 'ai-data-reader': aiDataReader, - 'kamenpro': kamenpro, - 'smart-warehouse': smartWarehouse, - 'power-platform-governance': powerPlatformGovernance, - 'website-mit-ki': websiteMitKi, - 'ai-music-production': aiMusicProduction, - 'automated-ad-creatives': automatedAdCreatives, - 'cursor-ide': cursorIde, - } -}; diff --git a/src/i18n/locales-old/de/portfolio/projects/ai-data-reader.ts b/src/i18n/locales-old/de/portfolio/projects/ai-data-reader.ts deleted file mode 100644 index dfbd0eb..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/ai-data-reader.ts +++ /dev/null @@ -1,107 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/ai-data-reader.ts -export const aiDataReader = { - meta: { - slug: 'ai-data-reader', - title: "Python Automatisierung für PDF-Datenextraktion | OLLAMA KI Integration von Damjan Savić", - description: "Fullstack Entwickler Köln Damjan Savić entwickelte Python Automatisierung zur PDF-Verarbeitung mit KI. ERP System Integration für automatisierte Produktdatenpflege.", - excerpt: "OLLAMA KI Integration Entwickler Damjan Savić: Python-basierte Prozessautomatisierung für E-Commerce. Custom Software Entwicklung Köln für B2B Enterprise Lösungen.", - date: "2025-02", - category: "Data Processing", - client: "Amazon Seller", - duration: "2 Monate", - url: "https://www.damjan-savic.com", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Python", "FastAPI", "Claude AI", "PyPDF", "Pydantic", "JTL-Wawi"], - tags: ["Data Extraction", "ERP", "Process Automation", "PDF Processing"] - }, - content: { - intro: "Ein von Damjan Savić entwickeltes KI-gestütztes System zur automatisierten Extraktion von Produktdaten aus PDF-Dokumenten mit direkter Integration in JTL-Warenwirtschaftssysteme. Damjan Savić hat diese Lösung für maximale Effizienz in der Produktdatenpflege konzipiert.", - - challenge: { - title: "Die Herausforderung", - description: "Die manuelle Erfassung von Produktdaten aus PDF-Dokumenten war zeitaufwendig und fehleranfällig.", - points: [ - "Große Mengen an PDF-Dokumenten mit Produktinformationen", - "Zeitintensive manuelle Dateneingabe", - "Inkonsistente Datenqualität", - "Hoher personeller Aufwand" - ] - }, - - solution: { - title: "Die Lösung von Damjan Savić", - description: "Damjan Savić entwickelte ein KI-gestütztes System zur automatisierten Datenextraktion", - content: "Durch den Einsatz von Claude AI und modernen Python-Technologien hat Damjan Savić eine vollautomatische Lösung geschaffen, die PDF-Dokumente verarbeitet und die extrahierten Daten direkt in das JTL-Warenwirtschaftssystem integriert.", - points: [ - "Automatisierte PDF-Verarbeitung", - "KI-gestützte Datenextraktion", - "Intelligente Datenvalidierung", - "Nahtlose JTL-Integration" - ] - }, - - technical: { - title: "Technische Umsetzung", - description: "Die Lösung basiert auf einer modularen Python-Architektur mit verschiedenen Kernkomponenten:", - points: [ - "Robuste PDF-Textextraktion mit PyPDF", - "KI-gestützte Datenextraktion mit Claude AI", - "Validierung durch Pydantic Models", - "JTL-ERP Integration über CSV-Export" - ], - code: `class ProductData(BaseModel): - artikel_nummer: str - name: str - hersteller: str - inhaltsstoffe: List[str] - allergene: List[str] - naehrwerte: NaehrwertData - nettogewicht: str - vegan: bool - vegetarisch: bool - -def _extract_with_claude(self, prompt: str) -> Dict[str, Any]: - '''Extrahiert strukturierte Daten mit Claude AI.''' - response = self.client.messages.create( - model='claude-3-sonnet-20240229', - messages=[{ - 'role': 'user', - 'content': prompt - }] - ) - return self._clean_json_string(response.content)` - }, - - implementation: { - title: "Implementierungsprozess", - description: "Der automatisierte Workflow wurde in mehreren Phasen implementiert:", - points: [ - "PDF-Batch-Verarbeitung aus Input-Verzeichnis", - "Intelligente Texterkennung und -strukturierung", - "Mehrschichtige Validierungslogik", - "Robuste Fehlerbehandlung", - "Integration in bestehende Systeme" - ] - }, - - results: { - title: "Ergebnisse und Auswirkungen", - description: "Die Implementierung führte zu signifikanten Verbesserungen im Geschäftsprozess:", - points: [ - "90% Zeitersparnis bei der Produktdatenpflege", - "99% Genauigkeit bei der Datenextraktion", - "Eliminierung manueller Dateneingaben", - "Standardisierte Produktdatenqualität", - "Deutlich reduzierte Fehlerquote" - ] - }, - - conclusion: "Das von Damjan Savić entwickelte System hat die Produktdatenpflege grundlegend revolutioniert. Durch die Kombination von KI-Technologie und automatisierter Datenverarbeitung hat Damjan Savić nicht nur die Effizienz drastisch gesteigert, sondern auch die Datenqualität erheblich verbessert. Das Projekt von Damjan Savić zeigt eindrucksvoll, wie moderne KI-Lösungen praktische Geschäftsprobleme lösen können." - } -}; - -// Re-export für Kompatibilität mit dem Projektimport-System -export default aiDataReader; \ No newline at end of file diff --git a/src/i18n/locales-old/de/portfolio/projects/ai-music-production.ts b/src/i18n/locales-old/de/portfolio/projects/ai-music-production.ts deleted file mode 100644 index fcb8f6a..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/ai-music-production.ts +++ /dev/null @@ -1,114 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/ai-music-production.ts -export const aiMusicProduction = { - meta: { - slug: 'ai-music-production', - title: "Suno AI - KI-gestützte Musikproduktion | Von Songtext zum fertigen Track", - description: "Vollständiger Workflow zur Musikproduktion mit Suno AI: Songtexte schreiben, Instrumentals generieren, Styles mixen und auf Soundcloud veröffentlichen.", - excerpt: "KI-gestützte Musikproduktion mit Suno AI. Vom handgeschriebenen Songtext zum fertigen Track in 2-3 Stunden - inklusive Cover-Design und Soundcloud-Upload.", - date: "2025-01", - category: "AI & Kreativ", - client: "Persönliches Projekt", - duration: "Ongoing", - url: "https://soundcloud.com/desetka", - videoUrl: "https://www.tella.tv/video/musikproduktion-per-ki-mit-damjan-savic-desetka-1-2mjh", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Suno AI", "Soundcloud", "Pinterest", "Photoshop", "KI-Musikproduktion"], - tags: ["Suno AI", "Musikproduktion", "KI-Musik", "Desetka", "Soundcloud", "Kreativ-KI"] - }, - content: { - intro: "Musikproduktion per KI: Ein vollständiger Workflow zur Erstellung professioneller Songs mit Suno AI. Von der Idee über den Songtext bis zum fertigen Track auf Soundcloud - alles in einem strukturierten Prozess.", - - challenge: { - title: "Die Herausforderung", - description: "Traditionelle Musikproduktion erfordert umfangreiche Ressourcen und Fähigkeiten.", - points: [ - "Klassische Musikproduktion benötigt teure Software und Hardware", - "Instrumentalisten und Produzenten müssen koordiniert werden", - "Der Produktionsprozess dauert oft Wochen oder Monate", - "Hohe Einstiegshürden für Künstler ohne musikalische Ausbildung", - "Kreative Visionen lassen sich schwer schnell umsetzen" - ] - }, - - solution: { - title: "Die Lösung", - description: "Ein strukturierter KI-Workflow für effiziente Musikproduktion", - content: "Mit Suno AI lässt sich der gesamte Musikproduktionsprozess auf wenige Stunden reduzieren. Der Workflow kombiniert menschliche Kreativität (Songtexte) mit KI-generierter Musik für authentische, professionelle Ergebnisse.", - points: [ - "Songtexte werden manuell geschrieben - volle kreative Kontrolle", - "Suno AI generiert Instrumentals basierend auf Style-Prompts", - "Iteratives Remixing für den perfekten Sound", - "Cover-Design mit Pinterest-Inspiration und Photoshop", - "Direkter Upload auf Soundcloud unter dem Alias 'Desetka'" - ] - }, - - technical: { - title: "Der Workflow", - description: "Schritt-für-Schritt Prozess zur KI-Musikproduktion:", - points: [ - "Songtext schreiben mit klarem Reimschema (z.B. Endungen auf e, a, i)", - "Melodie im Kopf entwickeln während des Schreibens", - "Instrumental in Suno AI mit Style-Prompts generieren", - "Weirdness (35%) und Audio Influence (75%) konfigurieren", - "Verschiedene Styles mixen (z.B. Synthwave → Luxury Rap)", - "Favoriten liken für KI-Lerneffekt", - "Cover auf Pinterest suchen und in Photoshop bearbeiten (1950x1950px)", - "WAV-Export und Upload auf Soundcloud" - ], - code: `// Suno AI Style-Konfiguration -const sunoConfig = { - name: "205 Matrize Instrumental", - settings: { - weirdness: "35%", - styleInfluence: "75%", - audioInfluence: "25-35%" // Niedriger bei Remastered - }, - styles: [ - "Synthwave", - "Melodic RIP", - "Luxury Rap" - ], - tips: [ - "Liked Songs beeinflussen zukünftige Generierungen", - "Bei Artefakten: Audio Influence reduzieren", - "Styles kombinieren für einzigartigen Sound" - ] -};` - }, - - implementation: { - title: "Kreativprozess", - description: "Die Kunst des Songschreibens mit KI-Unterstützung:", - points: [ - "Songtexte auf Serbisch verfassen (melodischer Klang)", - "Klares Reimschema für Hook und Strophen", - "Melodie mental entwickeln vor der Produktion", - "Keine Instrumentals nötig für erste Ideen", - "Später Übersetzung ins Englische möglich", - "2-3 Stunden für einen kompletten Song", - "An guten Tagen: 3 Songs pro Stunde möglich" - ] - }, - - results: { - title: "Ergebnisse", - description: "Vorteile der KI-gestützten Musikproduktion:", - points: [ - "Produktionszeit von Wochen auf Stunden reduziert", - "Volle kreative Kontrolle über Texte und Richtung", - "Professionelle Instrumentals ohne Studio", - "Iteratives Arbeiten bis zum perfekten Sound", - "Direkter Weg vom Konzept zur Veröffentlichung", - "Künstleralias 'Desetka' auf Soundcloud etabliert" - ] - }, - - conclusion: "KI-Musikproduktion mit Suno AI revolutioniert den kreativen Prozess. Die Kombination aus handgeschriebenen Songtexten und KI-generierten Instrumentals ermöglicht es, musikalische Visionen schnell und professionell umzusetzen. Der Mensch bleibt kreativ im Mittelpunkt - die KI ist das Werkzeug zur Realisierung." - } -}; - -export default aiMusicProduction; diff --git a/src/i18n/locales-old/de/portfolio/projects/automated-ad-creatives.ts b/src/i18n/locales-old/de/portfolio/projects/automated-ad-creatives.ts deleted file mode 100644 index 0f404f2..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/automated-ad-creatives.ts +++ /dev/null @@ -1,95 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/automated-ad-creatives.ts -export const automatedAdCreatives = { - meta: { - slug: 'automated-ad-creatives', - title: 'Automatisierte Ad Creatives: KI-gestützte Werbemittel-Erstellung', - description: 'Entwicklung eines Workflows zur automatisierten Erstellung von Facebook Ad Creatives mit Claude Opus 4.5 - ohne Designsoftware, komplett im Chat', - excerpt: 'Von der Designvorlage zum fertigen Werbemittel: Wie KI die Ad-Creative-Erstellung revolutioniert.', - date: '2025-01', - category: 'KI & Automatisierung', - client: 'Eigenprojekt', - duration: '1 Tag', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Opus 4.5', 'HTML/CSS', 'PNG Export', 'Prompt Engineering'], - tags: ['KI', 'Automatisierung', 'Facebook Ads', 'Marketing', 'No-Code'], - videoUrl: 'https://www.tella.tv/video/automatisierte-ad-creatives-1kyw' - }, - content: { - intro: 'Programme wie Illustrator, InDesign, Figma oder Canva können kompliziert sein. Dieses Projekt zeigt, wie sich Facebook Ad Creatives vollständig im KI-Chat erstellen lassen - ohne Designsoftware, ohne Programmierkenntnisse.', - - challenge: { - title: 'Die Herausforderung', - description: 'Die Erstellung von Werbemitteln für Facebook-Kampagnen erfordert traditionell:', - points: [ - 'Kenntnisse in Designsoftware (Illustrator, Figma, Canva)', - 'Zeit für Einarbeitung und Umsetzung', - 'Verständnis für Formatvorgaben und Best Practices', - 'Iterationen zwischen Design und Marketing', - 'Budget für Designer oder Design-Tools' - ] - }, - - solution: { - title: 'Der Lösungsansatz', - description: 'Ein KI-gestützter Workflow, der den gesamten Prozess im Chat-Fenster abbildet:', - content: 'Der komplette Workflow findet im Chat mit Claude Opus 4.5 statt. Alternativ funktionieren auch Gemini oder ChatGPT.', - points: [ - 'Designvorlage als visuelle Referenz für die KI', - 'HTML-Generierung durch natürlichsprachliche Prompts', - 'Automatische Konvertierung zu PNG-Bilddateien', - 'Integration zusätzlicher Bilder per Drag & Drop', - 'Iterationen durch einfache Chat-Anweisungen' - ] - }, - - technical: { - title: 'Technische Umsetzung', - description: 'Der Workflow im Detail:', - points: [ - 'Schritt 1: Designvorlage von Envato Elements als Referenz', - 'Schritt 2: Prompt mit Bild an Claude senden - HTML wird generiert', - 'Schritt 3: HTML zu PNG exportieren lassen', - 'Schritt 4: Zusätzliche Bilder per Drag & Drop integrieren' - ] - }, - - tools: { - title: 'Verwendete Tools', - items: [ - { name: 'Claude Opus 4.5', purpose: 'KI für HTML-Generierung und Bildexport' }, - { name: 'Envato Elements', purpose: 'Designvorlagen als Referenz' }, - { name: 'Unsplash', purpose: 'Kostenlose Bilder für die Creatives' } - ] - }, - - results: { - title: 'Vorteile des Ansatzes', - description: 'Der KI-gestützte Workflow bietet mehrere Vorteile:', - points: [ - 'Keine Design-Skills nötig: Die KI übernimmt die technische Umsetzung', - 'Schnelle Iterationen: Änderungen in Sekunden durch Chat-Anweisungen', - 'Skalierbar: Beliebig viele Varianten für A/B-Tests', - 'Kosteneffizient: Keine teuren Design-Tools erforderlich', - 'Flexibel: Funktioniert auch mit Gemini oder ChatGPT' - ] - }, - - useCases: { - title: 'Einsatzszenarien', - points: [ - 'Performance-Marketing: Schnelle Creative-Tests ohne Wartezeit', - 'E-Commerce: Produktwerbung in großem Umfang', - 'Startups: Professionelle Ads ohne Design-Team', - 'Agenturen: Effiziente Kundenarbeit bei Ad-Erstellung' - ] - }, - - conclusion: 'Der Workflow demonstriert, wie KI die Erstellung von Ad Creatives vereinfacht. Das Ergebnis ist vielleicht noch nicht auf dem Niveau eines professionellen Grafikdesigners - aber für schnelle Tests, erste Entwürfe oder Teams ohne Designressourcen ist dieser Ansatz eine echte Alternative. Die Technologie entwickelt sich rasant weiter.' - } -}; - -export default automatedAdCreatives; diff --git a/src/i18n/locales-old/de/portfolio/projects/cursor-ide.ts b/src/i18n/locales-old/de/portfolio/projects/cursor-ide.ts deleted file mode 100644 index 7babae6..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/cursor-ide.ts +++ /dev/null @@ -1,89 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/cursor-ide.ts -export const cursorIde = { - meta: { - slug: 'cursor-ide', - title: 'Cursor IDE: KI-gestützte Softwareentwicklung', - description: 'Einführung in Cursor - die revolutionäre KI-gestützte Entwicklungsumgebung, die Softwareprojekte durch natürliche Sprache ermöglicht', - excerpt: 'Entdecke, wie Cursor IDE als persönlicher KI-Programmierer fungiert und komplette Projekte aus natürlicher Sprache erstellt.', - date: '2025-01', - category: 'KI & Entwicklung', - client: 'Tutorial', - duration: 'Einführung', - url: 'https://cursor.com', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Cursor IDE', 'KI', 'Next.js', 'React', 'TypeScript', 'Node.js'], - tags: ['KI', 'IDE', 'Entwicklung', 'Tutorial', 'Code-Generierung', 'Automatisierung'], - videoUrl: 'https://www.tella.tv/video/cursor-ide-1-1kjg' - }, - content: { - intro: 'Cursor ist eine KI-gestützte Entwicklungsumgebung, die wie ein persönlicher Programmierer funktioniert. Sie versteht natürliches Deutsch, generiert Code eigenständig, findet und behebt Fehler - und baut komplette Softwareprojekte auf Zuruf.', - - challenge: { - title: 'Früher: Die Herausforderungen', - description: 'Traditionelle Softwareentwicklung war mit hohen Hürden verbunden:', - points: [ - 'Programmiersprachen mussten erlernt werden', - 'Fehlersuche dauerte oft Stunden', - 'Jede Zeile Code musste selbst getippt werden', - 'Google und Stackoverflow waren ständige Begleiter', - 'Hohe Einstiegshürde für Nicht-Entwickler' - ] - }, - - solution: { - title: 'Heute: Die Lösung mit Cursor', - description: 'Cursor revolutioniert die Softwareentwicklung durch KI-Integration:', - content: 'Stell dir vor, du hättest einen persönlichen Programmierer, der neben dir sitzt und alle deine Softwareideen in natürlichem gesprochenen Deutsch verstehen kann. Genau das ist Cursor.', - points: [ - 'Einfach beschreiben, was du haben möchtest', - 'KI findet und behebt Fehler automatisch', - 'KI generiert den kompletten Code', - 'KI erklärt das gesamte Projekt im Editor', - 'Integrierter Browser für direkte Vorschau' - ] - }, - - technical: { - title: 'Das Cursor Interface', - description: 'Nach dem Download über cursor.com besteht das Interface aus:', - points: [ - 'Menüleiste (oben): Navigation durch die IDE', - 'File Explorer (links): Projektstruktur mit Verzeichnissen und Dateien', - 'Editor (Mitte): Ansicht und Bearbeitung von Dateien', - 'Terminal (unten): Einblendbar über View > Terminal', - 'KI Chat (rechts): Steuerung der Entwicklung per KI' - ] - }, - - implementation: { - title: 'Erste Schritte', - description: 'So startest du mit Cursor:', - points: [ - 'Cursor von cursor.com herunterladen', - 'Installation für das jeweilige Betriebssystem durchführen', - 'Projektordner anlegen und in Cursor öffnen', - 'Im KI-Chat beschreiben, was gebaut werden soll', - 'Die KI arbeiten lassen und bei Bedarf anpassen' - ] - }, - - results: { - title: 'Praxisbeispiel', - description: 'Ein einfacher Prompt wie "Ich möchte eine Website aufbauen mit Next, React und TypeScript mit einer modernen Darstellung von Hello World" reicht aus:', - points: [ - 'KI prüft den Projektzustand', - 'Das gesamte Projekt wird automatisch aufgebaut', - 'Nach wenigen Sekunden steht die Website', - 'Mit npm install Abhängigkeiten installieren', - 'Mit npm run dev den Entwicklungsserver starten' - ] - }, - - conclusion: 'Cursor revolutioniert die Softwareentwicklung, indem es die Barriere zwischen Idee und Umsetzung dramatisch senkt. Statt Programmiersprachen zu lernen, beschreibst du einfach in natürlicher Sprache, was du haben möchtest - und die KI erledigt den Rest.' - } -}; - -export default cursorIde; diff --git a/src/i18n/locales-old/de/portfolio/projects/kamenpro.ts b/src/i18n/locales-old/de/portfolio/projects/kamenpro.ts deleted file mode 100644 index 99ed31e..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/kamenpro.ts +++ /dev/null @@ -1,135 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/kamenpro.ts -export const kamenpro = { - meta: { - slug: 'kamenpro', - title: "KamenPro: Digitale Transformation für dekorative Steinverkleidungen", - description: "Entwicklung einer modernen Multi-Location PWA für einen Hersteller dekorativer Steinverkleidungen aus Bijeljina mit React 18.3 und Supabase", - excerpt: "Von Stein zu Pixel: Wie ein traditioneller Handwerksbetrieb durch moderne Webtechnologie 300% mehr Anfragen generiert.", - date: "2025-01", - category: "Web Development", - client: "KamenPro - Željko", - duration: "3 Monate", - url: "https://kamenpro.net", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["React 18.3", "TypeScript", "Vite", "Supabase", "Framer Motion", "TailwindCSS", "PWA", "Schema.org"], - tags: ["Multi-Location SEO", "E-Commerce", "PWA", "Local Business", "Performance"] - }, - content: { - intro: "KamenPro, ein etablierter Hersteller dekorativer Steinverkleidungen aus Bijeljina, stand vor der Herausforderung, sein traditionelles Handwerk in die digitale Welt zu übertragen. Diese Case Study zeigt, wie moderne Webtechnologie einem lokalen Handwerksbetrieb zu überregionalem Erfolg verhalf.", - - challenge: { - title: "Die Herausforderung", - description: "Als Hersteller hochwertiger Steinverkleidungen aus Weißzement fehlte KamenPro die digitale Präsenz, um mit der Online-Konkurrenz mitzuhalten.", - points: [ - "Keine digitale Präsenz trotz hoher Online-Nachfrage", - "Kunden suchten online nach 'dekorativni kamen' ohne KamenPro zu finden", - "Fehlende Produktpräsentation für 3 verschiedene Steinstrukturen", - "Keine lokale SEO-Präsenz in Bijeljina, Brčko und Tuzla", - "Verlust potenzieller Kunden an digital präsente Konkurrenz" - ] - }, - - solution: { - title: "Der Lösungsansatz", - description: "Eine moderne PWA mit Multi-Location SEO-Strategie für maximale lokale Sichtbarkeit", - content: "Wir entwickelten eine hochperformante Progressive Web App, die die handwerkliche Qualität von KamenPro digital erlebbar macht. Der Fokus lag auf lokaler Auffindbarkeit in drei Städten und einer optimalen Produktpräsentation für Bauherren und Architekten.", - points: [ - "Multi-Location SEO für Bijeljina, Brčko und Tuzla", - "Produktkatalog mit HD-Bildern der Steinstrukturen", - "PWA für Offline-Verfügbarkeit auf Baustellen", - "Supabase-Backend für Produktverwaltung und Anfragen", - "Schema.org LocalBusiness für optimale Google-Präsenz" - ] - }, - - technical: { - title: "Technische Implementierung", - description: "Multi-Location SEO-Architektur mit standortspezifischen Landing Pages:", - points: [ - "Standort-basiertes Routing für 3 Städte", - "Produktkatalog-System mit Supabase", - "Bildoptimierung für schwere Steinstruktur-Fotos", - "PWA für Offline-Produktkatalog", - "Schema.org LocalBusiness für jede Stadt" - ], - code: `// Multi-Location SEO mit Schema.org -const LocationPage: React.FC<{city: string}> = ({ city }) => { - const structuredData = { - "@context": "https://schema.org", - "@type": "LocalBusiness", - "name": \`KamenPro \${city}\`, - "description": \`Dekorativni kamen i fasadne obloge u \${city}\`, - "telephone": "+387 65 678 634", - "address": { - "@type": "PostalAddress", - "addressLocality": city, - "addressCountry": "BA" - }, - "areaServed": { - "@type": "GeoCircle", - "geoRadius": "50000" - } - }; - - return ( - <> - - Dekorativni kamen {city} | KamenPro - - - - - - - ); -}; - -// Produktverwaltung mit Supabase -interface StoneProduct { - id: string; - name: string; - type: 'decorative_stone' | 'rustic_brick'; - dimensions: { length: 44, width: 8.5, thickness: 15 }; - price_per_m2: number; // 33-40 BAM - weight_per_m2: 32; // kg - textures: string[]; // 3 verschiedene - available_colors: string[]; -}` - }, - - implementation: { - title: "Lokale SEO-Erfolge", - description: "Durch gezielte Multi-Location-Optimierung erreichten wir Top-Rankings:", - points: [ - "Rank #1 für 'dekorativni kamen bijeljina'", - "Rank #2 für 'fasadne obloge brčko'", - "Rank #1 für 'rustik cigla tuzla'", - "Google My Business Integration für alle Standorte", - "Lokale Backlinks von Bauunternehmen" - ] - }, - - results: { - title: "Messbare Geschäftsergebnisse", - description: "Die digitale Transformation brachte beeindruckende Ergebnisse:", - points: [ - "300% mehr Anfragen in den ersten 3 Monaten", - "Von 0 auf Platz 1-3 bei lokalen Suchanfragen", - "45 Anfragen/Monat statt vorher ~12", - "25-30 Projekte/Quartal statt 8-10", - "ROI von 275% in 6 Monaten", - "Expansion in neue Märkte durch Online-Präsenz" - ] - }, - - conclusion: "Die digitale Transformation von KamenPro zeigt eindrucksvoll, wie ein traditioneller Handwerksbetrieb durch moderne Webtechnologie neue Märkte erschließen kann. Die Kombination aus Multi-Location SEO, optimierter Produktpräsentation und technischer Exzellenz führte zu einer Verdreifachung der Kundenanfragen. Besonders bemerkenswert: Ein lokaler Steinverkleidungs-Hersteller aus Bijeljina erreicht nun Kunden in der gesamten Region - ein Beweis dafür, dass durchdachte Digitalisierung auch im traditionellen Handwerk messbare Erfolge bringt." - } -}; - -// Re-export für Kompatibilität mit dem Projektimport-System -export default kamenpro; \ No newline at end of file diff --git a/src/i18n/locales-old/de/portfolio/projects/power-platform-governance.ts b/src/i18n/locales-old/de/portfolio/projects/power-platform-governance.ts deleted file mode 100644 index 77374fb..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/power-platform-governance.ts +++ /dev/null @@ -1,244 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/power-platform-governance.ts -export const powerPlatformGovernance = { - meta: { - slug: 'power-platform-governance', - title: "Power Platform Governance & Automation Suite", - description: "Enterprise-Governance-Plattform für Microsoft Power Platform und SharePoint Online", - excerpt: "Zentrale Verwaltung, Überwachung und Automatisierung der gesamten M365-Umgebung - von Tenant-Provisionierung bis Compliance-Monitoring.", - date: "2025-01", - category: "Enterprise Software", - client: "Enterprise CoE Teams", - duration: "6 Monate", - url: "https://governance-demo.azurewebsites.net", - repository: "", - documentation: "/docs/power-platform-governance", - published: true, - featured: true, - technologies: ["React", "TypeScript", "Node.js", "Microsoft Graph", "PowerShell", "Azure Functions", "GraphQL", "Fluent UI"], - tags: ["Microsoft 365", "Power Platform", "SharePoint", "Governance", "Automation", "Enterprise"] - }, - content: { - intro: "Eine umfassende Enterprise-Governance-Plattform, die IT-Administratoren und Power Platform CoE Teams ermöglicht, ihre gesamte M365-Umgebung zentral zu verwalten und zu automatisieren.", - - challenge: { - title: "Die Herausforderung", - description: "Unkontrolliertes Wachstum von Power Apps, Flows und SharePoint-Sites führte zu kritischen Problemen.", - points: [ - "Shadow IT durch ungovernte Citizen Development", - "Compliance-Risiken und Datenschutzverletzungen", - "Explodierende Lizenzkosten durch ungenutzte Ressourcen", - "Fehlende Übersicht über die Power Platform Landschaft", - "Manuelle, fehleranfällige Provisionierungsprozesse", - "Inkonsistente Governance-Policies über Teams hinweg" - ] - }, - - solution: { - title: "Die Lösung", - description: "Eine zentrale Governance-Plattform mit Echtzeit-Monitoring und Automatisierung", - content: "Die Plattform kombiniert moderne Web-Technologien mit Microsoft 365 APIs, um eine nahtlose Integration und vollständige Kontrolle über die gesamte Power Platform Umgebung zu ermöglichen.", - points: [ - "Automated Provisioning Hub für Sites, Teams und Environments", - "Real-Time Monitoring Dashboard mit Live Activity Streams", - "Power Platform Governance Center mit DLP Policy Enforcement", - "Compliance & Security Suite mit Permission Analyzer", - "PowerShell Automation Framework für Custom Operations", - "Intelligent Resource Optimization mit ML-based Predictions" - ] - }, - - technical: { - title: "Technische Implementierung", - description: "Die Lösung basiert auf einer modernen Microservices-Architektur mit Event-Driven Design:", - points: [ - "React 18.3 mit TypeScript für type-safe Frontend-Entwicklung", - "Fluent UI v9 für native Microsoft Look & Feel", - "GraphQL API mit Apollo Server für effiziente Datenabfragen", - "Azure Functions für serverlose Automatisierung", - "PowerShell 7.4 Core für M365-Operationen", - "Azure Service Bus für asynchrone Job-Verarbeitung", - "Cosmos DB für globale Datenreplikation" - ] - }, - - features: { - title: "Hauptfunktionalitäten", - items: [ - { - title: "Automated Provisioning Hub", - description: "Template-basierte SharePoint Site-Erstellung mit Bulk-Provisioning und Post-Provisioning Workflows", - icon: "automation" - }, - { - title: "Real-Time Monitoring", - description: "Live Activity Streams mit Echtzeit-Updates über WebSockets und GraphQL Subscriptions", - icon: "monitoring" - }, - { - title: "Permission Analyzer", - description: "Cross-tenant Permission Reports mit Overprivileged Users Detection und External Sharing Audit", - icon: "security" - }, - { - title: "PowerShell Framework", - description: "120+ Custom Cmdlets mit zentraler Script Library und Scheduled Automation", - icon: "powershell" - }, - { - title: "Compliance Suite", - description: "DLP Policy Builder mit Sensitive Data Discovery und Automated Remediation", - icon: "compliance" - }, - { - title: "Resource Optimizer", - description: "ML-basierte Usage Prediction mit automatischer Cleanup und Cost Allocation", - icon: "optimization" - } - ] - }, - - implementation: { - title: "Implementierungsphasen", - phases: [ - { - title: "Phase 1: Foundation", - duration: "6 Wochen", - description: "Architektur-Setup und Core Services", - tasks: [ - "Azure Infrastructure Setup mit Terraform", - "GraphQL API und Authentication Service", - "Microsoft Graph Integration", - "PowerShell Execution Framework" - ] - }, - { - title: "Phase 2: Core Features", - duration: "10 Wochen", - description: "Entwicklung der Hauptfunktionalitäten", - tasks: [ - "Provisioning Engine mit Template System", - "Real-Time Monitoring Dashboard", - "Permission Analyzer Implementation", - "DLP Policy Management" - ] - }, - { - title: "Phase 3: Intelligence", - duration: "8 Wochen", - description: "ML-Features und Automation", - tasks: [ - "Resource Usage Prediction Model", - "Automated Cleanup Workflows", - "Cost Optimization Engine", - "Anomaly Detection System" - ] - } - ] - }, - - challenges: { - title: "Herausforderungen & Lösungen", - items: [ - { - challenge: "API Rate Limiting", - solution: "Intelligent Request Batching mit exponential backoff und Redis-basiertem Caching" - }, - { - challenge: "Multi-Tenant Isolation", - solution: "Separate Datenbanken pro Tenant mit Row-Level Security und Encryption at Rest" - }, - { - challenge: "Real-Time Updates bei großen Datenmengen", - solution: "WebSocket-basierte Updates mit GraphQL Subscriptions und Delta Queries" - }, - { - challenge: "PowerShell Execution Security", - solution: "Sandboxed Execution mit Azure Container Instances und Just Enough Administration" - } - ] - }, - - results: { - title: "Ergebnisse", - description: "Die Plattform transformierte die Power Platform Governance vollständig:", - metrics: [ - { label: "Provisioning Zeit", value: "95% schneller" }, - { label: "Compliance Rate", value: "94%" }, - { label: "Kostenreduktion", value: "40%" }, - { label: "Admin-Produktivität", value: "3x" }, - { label: "Incident Response", value: "80% schneller" }, - { label: "Shadow IT Reduktion", value: "90%" } - ], - impact: "Die Lösung ermöglichte es Unternehmen, die Balance zwischen Innovation und Kontrolle zu finden. Citizen Developer konnten sicher arbeiten, während IT die volle Governance behielt." - }, - - performance: { - title: "Performance & Skalierung", - metrics: { - technical: { - title: "Technische Metriken", - items: [ - "35.000+ Lines of Code", - "45+ React Components", - "120+ PowerShell Cmdlets", - "80+ GraphQL Endpoints", - "92% Test Coverage" - ] - }, - scale: { - title: "Skalierung", - items: [ - "25+ Enterprise Tenants", - "50.000+ verwaltete Ressourcen", - "5.000+ tägliche Automatisierungen", - "100+ gleichzeitige Nutzer", - "99.9% Uptime SLA" - ] - }, - architecture: { - title: "Architektur", - items: [ - "Multi-Region Deployment", - "Auto-Scaling mit AKS", - "Global Data Replication", - "Zero-Downtime Deployments", - "Disaster Recovery <1h RTO" - ] - } - } - }, - - testimonial: { - text: "Diese Plattform hat unsere Power Platform Governance revolutioniert. Was früher Wochen dauerte, passiert jetzt in Minuten - vollautomatisiert und compliant.", - author: "Michael Schmidt", - position: "Head of IT Governance", - company: "Fortune 500 Company" - }, - - learnings: { - title: "Lessons Learned", - items: [ - "Event-Driven Architecture ist essentiell für Skalierbarkeit bei Enterprise-Workloads", - "PowerShell Core ermöglicht Cross-Platform Automation ohne Windows-Abhängigkeit", - "GraphQL reduzierte die API-Calls um 60% durch effizientes Data Fetching", - "Policy as Code vereinfachte Governance-Management erheblich", - "Incremental Sync mit Delta Queries ist kritisch für Performance" - ] - }, - - future: { - title: "Zukunftsperspektiven", - description: "Die Plattform wird kontinuierlich erweitert und verbessert.", - plans: [ - "AI-Powered Insights mit Anomalie-Erkennung", - "Microsoft Copilot Integration für Natural Language Governance", - "Fabric Analytics für erweiterte BI-Integration", - "Container Apps für serverlose PowerShell-Execution", - "Zero Trust Security Model Implementation", - "Cross-Cloud Support für AWS und Google Cloud" - ] - } - } -}; - -export default powerPlatformGovernance; \ No newline at end of file diff --git a/src/i18n/locales-old/de/portfolio/projects/smart-warehouse.ts b/src/i18n/locales-old/de/portfolio/projects/smart-warehouse.ts deleted file mode 100644 index 9c0ff37..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/smart-warehouse.ts +++ /dev/null @@ -1,222 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/smart-warehouse.ts -export const smartWarehouse = { - meta: { - slug: 'smart-warehouse', - title: "Intelligente Lagerverwaltung mit Computer Vision", - description: "KI-gestütztes System zur Echtzeit-Bestandsführung und Optimierung von Lagerprozessen", - excerpt: "Entwicklung eines autonomen Lagerverwaltungssystems mit Computer Vision, IoT-Sensorik und Machine Learning für präzise Bestandsführung.", - date: "2025-01", - category: "AI & Automation", - client: "LogiTech Solutions GmbH", - duration: "4 Monate", - url: "https://warehouse-demo.example.com", - repository: "", - documentation: "/case-studies/smart-warehouse", - published: true, - featured: true, - technologies: ["YOLOv8", "Python", "FastAPI", "React", "PostgreSQL", "Docker", "Kubernetes", "IoT", "MQTT"], - tags: ["Computer Vision", "Machine Learning", "IoT", "Edge Computing", "Automation"] - }, - content: { - intro: "Ein mittelständischer Logistikdienstleister transformierte seine manuelle Lagerverwaltung durch ein vollautomatisiertes System, das Computer Vision, IoT-Sensorik und Machine Learning kombiniert.", - - challenge: { - title: "Die Herausforderung", - description: "Die manuelle Bestandsführung führte zu erheblichen operativen Problemen.", - points: [ - "Diskrepanzen zwischen tatsächlichem und gebuchtem Bestand von bis zu 15%", - "Zeitintensive manuelle Inventuren (3-4 Tage pro Quartal)", - "Fehlende Echtzeit-Transparenz über Lagerbestände", - "Ineffiziente Lagerplatznutzung durch fehlende Optimierung", - "Hohe Personalkosten durch manuelle Prozesse" - ] - }, - - solution: { - title: "Die Lösung", - description: "Entwicklung eines vollautomatisierten Lagerverwaltungssystems", - content: "Das System kombiniert Computer Vision, IoT-Sensorik und Machine Learning für eine kontinuierliche, präzise Bestandsführung ohne menschliches Eingreifen.", - points: [ - "KI-gestützte Objekterkennung mittels hochauflösender Kameras", - "IoT-Gewichtssensoren zur Validierung", - "Predictive Analytics für Bestandsoptimierung", - "Echtzeit-Dashboard mit mobilem Zugriff", - "Automatische Nachbestellungstrigger" - ] - }, - - technical: { - title: "Technische Implementierung", - description: "Die Lösung basiert auf einer modularen Microservices-Architektur mit Edge Computing für Echtzeitverarbeitung:", - points: [ - "YOLOv8 für präzise Objekterkennung", - "Edge Computing für <50ms Bildverarbeitung", - "Apache Kafka für Stream Processing von 2TB Daten/Tag", - "MQTT-basierte IoT-Integration mit 200+ Sensoren", - "PostgreSQL für Datenpersistenz", - "Kubernetes für Skalierbarkeit" - ] - }, - - features: { - title: "Kernfunktionen", - items: [ - { - title: "Echtzeit-Objekterkennung", - description: "98,7% Genauigkeit bei der Bestandserfassung durch KI-gestützte Bilderkennung", - icon: "camera" - }, - { - title: "IoT-Sensorintegration", - description: "200+ Sensoren validieren CV-Ergebnisse durch Gewichtsmessungen", - icon: "sensor" - }, - { - title: "Predictive Analytics", - description: "Vorhersage von Bestandsbewegungen und automatische Nachbestellung", - icon: "chart" - }, - { - title: "Mobile Dashboard", - description: "Echtzeit-Zugriff auf alle Lagerdaten von überall", - icon: "mobile" - } - ] - }, - - implementation: { - title: "Implementierungsphasen", - phases: [ - { - title: "Phase 1: Proof of Concept", - duration: "4 Wochen", - description: "Prototyp-Entwicklung und Modelltraining", - tasks: [ - "Entwicklung eines Prototyps für einen Lagerbereich", - "Training des ML-Modells mit 10.000+ annotierten Bildern", - "Integration von 5 Testkameras und 20 IoT-Sensoren", - "Validierung der Erkennungsgenauigkeit" - ] - }, - { - title: "Phase 2: Skalierung", - duration: "8 Wochen", - description: "Vollständiger Rollout auf 5.000m² Lagerfläche", - tasks: [ - "Installation von 45 Kameras und 200+ Sensoren", - "Entwicklung des Echtzeit-Dashboards", - "Integration in bestehendes ERP-System", - "Performance-Optimierung" - ] - }, - { - title: "Phase 3: Optimierung", - duration: "4 Wochen", - description: "Fine-Tuning und erweiterte Features", - tasks: [ - "Fine-Tuning der ML-Modelle", - "Implementierung von Predictive Analytics", - "Mobile App Entwicklung", - "Schulung der Mitarbeiter" - ] - } - ] - }, - - challenges: { - title: "Herausforderungen & Lösungen", - items: [ - { - challenge: "Variierende Lichtverhältnisse", - solution: "HDR-Kameras mit adaptiver Bildvorverarbeitung und augmentierten Trainingsdaten" - }, - { - challenge: "Echtzeitverarbeitung großer Datenmengen", - solution: "Edge Computing für Vorverarbeitung und Apache Kafka für Stream Processing" - }, - { - challenge: "Legacy-System Integration", - solution: "Entwicklung eines Adapter-Layers mit bidirektionaler Synchronisation" - } - ] - }, - - results: { - title: "Ergebnisse", - description: "Das System transformierte die Lagerverwaltung vollständig:", - metrics: [ - { label: "Erkennungsgenauigkeit", value: "98,7%" }, - { label: "Reduktion Inventurzeit", value: "85%" }, - { label: "Weniger Fehlbestände", value: "60%" }, - { label: "Lagerplatznutzung", value: "+35%" }, - { label: "ROI", value: "14 Monate" }, - { label: "System-Uptime", value: "99,95%" } - ], - impact: "Die Echtzeit-Transparenz ermöglichte proaktive Entscheidungen und verhinderte Lieferengpässe. Mitarbeiter konnten sich auf wertschöpfende Tätigkeiten fokussieren, während die KI die Bestandsführung übernahm." - }, - - performance: { - title: "Performance Metriken", - metrics: { - processing: { - title: "Verarbeitung", - items: [ - "Bildverarbeitung: <50ms pro Frame", - "API Response Time: p95 < 100ms", - "Datenverarbeitung: 500 Events/Sekunde", - "System Uptime: 99.95%" - ] - }, - scale: { - title: "Skalierung", - items: [ - "45 Kameras aktiv (bis 200 möglich)", - "200+ IoT Sensoren", - "50+ Concurrent Users", - "50TB Datenspeicher" - ] - }, - ml: { - title: "ML Performance", - items: [ - "mAP@50: 0.92", - "Inference Time: 23ms", - "False Positive Rate: <2%", - "Model Size: 138MB" - ] - } - } - }, - - testimonial: { - text: "Die Implementierung hat unsere Lagerprozesse revolutioniert. Was früher Tage dauerte, passiert jetzt in Echtzeit. Die Genauigkeit und Effizienz sind beeindruckend.", - author: "Thomas Weber", - position: "Head of Logistics", - company: "LogiTech Solutions GmbH" - }, - - learnings: { - title: "Lessons Learned", - items: [ - "Edge Computing ist essentiell: Die Vorverarbeitung direkt an der Kamera reduzierte die Netzwerklast um 70%", - "Datenqualität vor Quantität: 1.000 hochqualitative Annotationen waren wertvoller als 10.000 automatisch generierte", - "Iterative Entwicklung: Frühe Pilotierung in einem Bereich ermöglichte schnelle Anpassungen", - "Change Management: Frühzeitige Einbindung der Mitarbeiter war entscheidend für die Akzeptanz" - ] - }, - - future: { - title: "Zukunftsperspektiven", - description: "Das System wurde als White-Label-Lösung konzipiert und kann mit minimalen Anpassungen in anderen Lagern eingesetzt werden.", - plans: [ - "Integration von Robotik für automatisierte Kommissionierung", - "Erweiterung auf Außenlager und mobile Einheiten", - "KI-basierte Vorhersage von Wartungsbedarf", - "Blockchain-Integration für Supply Chain Transparenz", - "AR-Brillen für Lagermitarbeiter mit visuellen Hinweisen" - ] - } - } -}; - -export default smartWarehouse; \ No newline at end of file diff --git a/src/i18n/locales-old/de/portfolio/projects/website-mit-ki.ts b/src/i18n/locales-old/de/portfolio/projects/website-mit-ki.ts deleted file mode 100644 index b6bd1a0..0000000 --- a/src/i18n/locales-old/de/portfolio/projects/website-mit-ki.ts +++ /dev/null @@ -1,80 +0,0 @@ -// src/i18n/locales/de/portfolio/projects/website-mit-ki.ts -export const websiteMitKi = { - meta: { - slug: 'website-mit-ki', - title: 'Eigene Website mit KI bauen: Von Null zur fertigen Seite', - description: 'Schritt-für-Schritt Anleitung zum Aufbau einer professionellen Website mit Claude Code - DSGVO-konform, mehrsprachig, mit Portfolio und Blog', - excerpt: 'Wie du in unter einer Stunde eine komplette Website erstellst - ohne eine einzige Zeile Code selbst zu schreiben.', - date: '2025-01', - category: 'KI & Automatisierung', - client: 'Eigenprojekt', - duration: '30 Minuten', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Code', 'React', 'TypeScript', 'Vercel', 'GitHub', 'Vite'], - tags: ['KI', 'Website', 'No-Code', 'Tutorial', 'Claude Code', 'Vercel'], - videoUrl: 'https://www.tella.tv/video/baue-deine-website-noch-heute-mit-ki-8f7v' - }, - content: { - intro: 'Eine professionelle Website ohne Programmierkenntnisse? Mit KI ist das heute möglich. Dieses Tutorial zeigt den kompletten Prozess - von der leeren Projektmappe zur fertigen, gehosteten Website.', - - challenge: { - title: 'Die Herausforderung', - description: 'Der traditionelle Weg zur eigenen Website ist oft kompliziert und teuer:', - points: [ - 'Baukastensysteme wie Wix, WordPress oder Webflow verursachen monatliche Kosten', - 'Eigene Entwicklung erfordert Programmierkenntnisse', - 'Designer und Entwickler sind teuer', - 'DSGVO-Konformität und SEO-Optimierung sind komplex', - 'Mehrsprachigkeit und responsive Design erfordern zusätzlichen Aufwand' - ] - }, - - solution: { - title: 'Der Lösungsansatz', - description: 'Mit KI lässt sich eine komplette Website in unter einer Stunde aufbauen:', - content: 'Der komplette Workflow nutzt Claude Code für die autonome Entwicklung, GitHub für die Versionierung und Vercel für kostenloses Hosting.', - points: [ - 'DSGVO-konforme Implementierung mit Cookie-Banner', - 'Mehrsprachigkeit (Deutsch, Englisch, weitere möglich)', - 'Portfolio-Seite mit interaktiven Projekten', - 'Blog-Funktionalität für Blogposts', - 'SEO-Optimierung für bessere Google-Rankings', - 'Kontaktformular für potenzielle Kunden' - ] - }, - - technical: { - title: 'Der Workflow', - description: 'So funktioniert der Prozess Schritt für Schritt:', - points: [ - 'Schritt 1: GitHub-Account erstellen und Repository anlegen', - 'Schritt 2: Vercel-Account für kostenloses Hosting einrichten', - 'Schritt 3: Lokalen Projektordner mit relevanten Dokumenten vorbereiten', - 'Schritt 4: Claude Code öffnen und Prompt mit gewünschten Features eingeben', - 'Schritt 5: KI arbeitet autonom und erstellt die komplette Website', - 'Schritt 6: Projekt auf GitHub pushen und in Vercel importieren' - ] - }, - - results: { - title: 'Vorteile dieser Lösung', - description: 'Die KI-gestützte Website-Entwicklung bietet mehrere Vorteile:', - points: [ - 'Keine Programmierkenntnisse erforderlich', - 'Minimale Kosten: Nur KI-Abo und optional Domain', - 'Bessere Sichtbarkeit durch SEO-Optimierung', - 'Volle Kontrolle: Code liegt auf GitHub, Hosting ist kostenlos', - 'Schnelle Änderungen per Chat-Anweisung möglich', - 'Mobile-optimiertes, responsives Design inklusive' - ] - }, - - conclusion: 'Eine komplette, professionelle Website lässt sich heute in unter einer Stunde aufbauen - ohne eine einzige Zeile Code selbst zu schreiben. Die Kombination aus KI-Entwicklung, kostenlosem Hosting und Versionierung macht diese Lösung nicht nur für Entwickler interessant, sondern für alle, die eine professionelle Webpräsenz benötigen.' - } -}; - -export default websiteMitKi; diff --git a/src/i18n/locales-old/de/seo-content.ts b/src/i18n/locales-old/de/seo-content.ts deleted file mode 100644 index 8dc041a..0000000 --- a/src/i18n/locales-old/de/seo-content.ts +++ /dev/null @@ -1,104 +0,0 @@ -export const seoContent = { - hero: { - title: "Damjan Savić | Voice AI, KI-Agenten & Fullstack-Entwicklung", - subtitle: "Voice AI, autonome Agenten und skalierbare Softwarelösungen", - description: "Als AI & Automation Specialist aus Köln entwickelt Damjan Savić Voice AI Lösungen, autonome KI-Agenten und skalierbare Fullstack-Anwendungen mit Claude, GPT-4 und n8n.", - cta: { - primary: "Projekte ansehen", - secondary: "Kontakt aufnehmen" - } - }, - services: { - title: "IT-Dienstleistungen von Damjan Savić - AI & Automation Specialist Köln", - subtitle: "Voice AI, KI-Agenten & Enterprise Solutions von Damjan Savić", - items: { - voiceai: { - title: "Voice AI Entwicklung von Damjan Savić | VAPI, Conversational AI & Sprachassistenten", - description: "Damjan Savić entwickelt Voice AI Lösungen mit VAPI und Conversational AI. Von automatisierten Telefonassistenten bis zu Recruiting-Bots - Damjan Savić implementiert sprachgesteuerte KI-Systeme für Ihr Unternehmen.", - keywords: ["Voice AI Entwickler Deutschland", "VAPI Integration", "Sprachassistent Entwicklung", "Conversational AI", "AI Voice Agent", "Recruiting Bot"] - }, - agents: { - title: "Autonome KI-Agenten von Damjan Savić | n8n, Claude & GPT-4 Integration", - description: "Damjan Savić entwickelt autonome KI-Agenten mit n8n, Claude API und GPT-4. Diese intelligenten Systeme automatisieren komplexe Workflows, treffen eigenständige Entscheidungen und optimieren Ihre Geschäftsprozesse.", - keywords: ["Autonome KI Agenten", "n8n Automatisierung", "Claude API Integration", "GPT-4 Integration", "AI Workflow Automatisierung", "Anthropic Developer"] - }, - backend: { - title: "Enterprise Backend Development von Damjan Savić | Python & Cloud Architecture", - description: "Damjan Savić entwickelt skalierbare Backend-Systeme mit Python, FastAPI und Django. Als erfahrener Cloud Architect implementiert Damjan Savić Microservices, RESTful APIs und Event-Driven Architectures für Enterprise-Anwendungen.", - keywords: ["Backend Entwickler Köln", "Python Entwickler Köln", "API Entwicklung Python FastAPI", "Microservices Entwickler", "Django Entwickler Deutschland", "Node.js Entwickler Köln"] - }, - frontend: { - title: "Modern Frontend Development von Damjan Savić | React, TypeScript & Next.js", - description: "Damjan Savić erstellt moderne, performante Frontend-Lösungen mit React, TypeScript und Next.js. Spezialisiert auf Enterprise UI/UX, Progressive Web Apps und barrierefreie Webanwendungen entwickelt Damjan Savić zukunftssichere Interfaces.", - keywords: ["React Entwickler Köln", "Frontend Entwickler Köln", "Next.js Entwickler Deutschland", "TypeScript React Entwickler", "Progressive Web App Entwicklung", "JavaScript Entwickler Köln"] - }, - ai: { - title: "KI & LLM Integration von Damjan Savić | Claude, GPT-4 & OLLAMA Experte", - description: "Damjan Savić integriert Claude, GPT-4 und OLLAMA in Ihre Geschäftsprozesse. Als KI-Spezialist implementiert Damjan Savić RAG-Systeme, Prompt Engineering und LLM-basierte Automatisierungen für intelligente Unternehmenslösungen.", - keywords: ["Claude API Integration", "GPT-4 Integration Entwickler", "OLLAMA KI Integration", "LLM Entwickler", "RAG Entwicklung", "Prompt Engineering", "Anthropic Developer"] - }, - erp: { - title: "ERP & System Integration von Damjan Savić | SAP, Dynamics & Custom Solutions", - description: "Damjan Savić verbindet Ihre Unternehmenssysteme nahtlos. Mit Expertise in SAP, Microsoft Dynamics und Custom ERP-Lösungen optimiert Damjan Savić Ihre Geschäftsprozesse durch intelligente Integration und Automatisierung.", - keywords: ["ERP System Integration Köln", "B2B Software Entwicklung", "Enterprise Software Developer", "Business Automation Köln", "System Integration Spezialist", "SAP Integration"] - }, - ecommerce: { - title: "E-Commerce Solutions von Damjan Savić | Shopify, WooCommerce & Custom Shops", - description: "Damjan Savić entwickelt leistungsstarke E-Commerce-Plattformen. Von Shopify-Anpassungen bis zu maßgeschneiderten Online-Shops realisiert Damjan Savić skalierbare Lösungen mit Payment-Integration, Inventory Management und Multi-Channel-Vertrieb.", - keywords: ["E-Commerce Integration Spezialist", "Online Shop Entwicklung Köln", "E-Commerce Developer", "Payment Integration", "Shop-System Entwicklung", "Shopify Developer"] - }, - automation: { - title: "Business Process Automation von Damjan Savić | RPA & Workflow Optimization", - description: "Damjan Savić automatisiert Ihre Geschäftsprozesse intelligent. Mit Python, RPA-Tools und Custom Workflows steigert Damjan Savić Ihre Effizienz, reduziert Fehler und beschleunigt Ihre digitale Transformation.", - keywords: ["Prozessautomatisierung Python Köln", "Python Automatisierung Entwickler", "RPA Entwicklung Köln", "Workflow Automation", "Business Process Automation", "Task Automation Developer"] - } - } - }, - skills: { - title: "Technologie-Stack", - categories: { - languages: { - title: "Programmiersprachen", - items: ["Python", "JavaScript", "TypeScript", "SQL", "Bash"] - }, - backend: { - title: "Backend Technologies", - items: ["FastAPI", "Django", "Node.js", "Express", "PostgreSQL", "MongoDB", "Redis"] - }, - frontend: { - title: "Frontend Technologies", - items: ["React", "Next.js", "Vue.js", "Tailwind CSS", "Material-UI", "Framer Motion"] - }, - ai: { - title: "AI/ML Tools", - items: ["OLLAMA", "LangChain", "OpenAI API", "Hugging Face", "TensorFlow", "PyTorch"] - }, - devops: { - title: "DevOps & Tools", - items: ["Docker", "Kubernetes", "AWS", "CI/CD", "Git", "Linux"] - } - } - }, - cta: { - title: "Bereit für Ihr nächstes Projekt mit Damjan Savić?", - description: "Damjan Savić setzt Ihre Ideen in die Realität um. Von der Konzeption bis zur Implementierung begleitet Damjan Savić Ihr Projekt professionell.", - button: "Damjan Savić kontaktieren - Kostenloses Erstgespräch" - }, - testimonials: { - title: "Was Kunden sagen", - items: [ - { - text: "Damjan Savić hat unsere Python-Skripte in eine moderne Web-App transformiert. Die von Damjan Savić entwickelte Automatisierung spart uns täglich 4 Stunden Arbeit.", - author: "Michael Schmidt", - role: "CTO, TechStart GmbH", - keywords: ["Damjan Savić Python Automatisierung", "Web App Entwicklung Damjan Savić"] - }, - { - text: "Die von Damjan Savić implementierte OLLAMA-Integration ermöglicht uns KI-Features ohne Cloud-Kosten. Datenschutz und Performance der Lösung von Damjan Savić sind erstklassig.", - author: "Sarah Weber", - role: "Product Owner, DataSec AG", - keywords: ["Damjan Savić OLLAMA Integration", "Datenschutz KI Damjan Savić"] - } - ] - } -} \ No newline at end of file diff --git a/src/i18n/locales-old/en/blog/index.ts b/src/i18n/locales-old/en/blog/index.ts deleted file mode 100644 index d9d044a..0000000 --- a/src/i18n/locales-old/en/blog/index.ts +++ /dev/null @@ -1,175 +0,0 @@ -// src/i18n/locales/en/blog/index.ts -export const blog = { - meta: { - title: 'Blog - JTL Integration & Digital Solutions', - description: 'Insights and Best Practices on JTL-WaWi, E-Commerce, and Digital Transformation', - header: { - title: 'Insights & Best Practices', - subtitle: 'Insights and Best Practices on JTL-WaWi, E-Commerce, and Digital Transformation' - } - }, - posts: { - 'erp-integration-breuninger': { - title: 'ApparelMagic and TradeByte: Analysis of Complex Integrations', - date: '2024-02-09', - excerpt: 'Detailed analysis of an e-commerce integration between Apparel Magic and Breuninger via TradeByte', - category: 'System Integration', - tags: ['ERP', 'Apparel Magic', 'TradeByte', 'API Integration', 'Python', 'MariaDB'], - coverImage: '/images/posts/erp-integration-breuninger/cover.jpg', - content: { - intro: { - title: 'Apparel Magic meets Breuninger: A Technical Analysis of the TradeByte Integration', - description: 'The integration of e-commerce systems with established marketplaces poses unique challenges for companies. In this article, I share my experiences from a complex integration project between Apparel Magic as an ERP system and the Breuninger platform via TradeByte.' - }, - background: { - title: 'Project Background', - systems: { - erp: 'Apparel Magic as an ERP system for product data and inventory management', - middleware: 'TradeByte as the middleware for the Breuninger platform' - }, - challenges: { - sync: 'Bidirectional synchronization of orders', - customers: 'Automated customer creation', - delivery: 'Management of delivery notes', - inventory: 'Real-time inventory management' - } - }, - tech: { - title: 'Technical Architecture', - components: { - title: 'Key Components' - }, - database: { - title: 'Middleware Database', - description: 'The MariaDB database serves as the central data store for the integration:' - } - }, - api: { - title: 'API Integrations', - apparel_magic: { - title: 'Apparel Magic API', - description: 'The REST API of Apparel Magic is used for customer creation and inventory management:' - }, - tradebyte: { - title: 'TradeByte Integration', - description: 'The TradeByte API uses a combination of REST and XML:' - } - }, - order_process: { - title: 'Order Process', - steps: { - fetch: 'Regular retrieval of new orders from TradeByte', - customers: 'Automatic customer creation in Apparel Magic', - process: 'Order processing and status update', - delivery: 'Generation and storage of delivery notes' - }, - delivery_notes: { - title: 'Delivery Note Management' - } - }, - challenges: { - title: 'Challenges and Solutions', - status: { - title: '1. Status Management', - description: 'A particular challenge was managing order statuses:' - }, - error_handling: { - title: '2. Error Handling and Monitoring', - description: 'Robust error handling was essential for production operation:' - } - }, - best_practices: { - title: 'Best Practices', - api: { - title: '1. API Communication', - items: { - retry: 'Implementation of retry mechanisms', - errors: 'Careful error handling', - logging: 'Comprehensive logging of all communications' - } - }, - data: { - title: '2. Data Management', - items: { - storage: 'Central data storage in MariaDB', - transactions: 'Transactional security for critical operations', - validation: 'Regular data validation' - } - }, - automation: { - title: '3. Process Automation', - items: { - customers: 'Automated customer creation', - status: 'Automatic status updates', - delivery: 'Systematic delivery note management' - } - } - }, - lessons: { - title: 'Lessons Learned', - api: { - title: '1. API Design', - items: { - docs: 'Thorough API documentation is essential', - auth: 'Understanding of various authentication methods', - limits: 'Consideration of rate limits' - } - }, - validation: { - title: '2. Data Validation', - items: { - rules: 'Implementation of strict validation rules', - edge_cases: 'Careful handling of edge cases', - cleanup: 'Automated data cleanup' - } - }, - optimization: { - title: '3. Process Optimization', - items: { - automation: 'Continuous improvement of automation', - performance: 'Regular performance reviews', - monitoring: 'Proactive monitoring' - } - } - }, - conclusion: { - title: 'Conclusion', - requirements: { - understanding: 'Deep understanding of both systems', - implementation: 'Careful implementation of API communication', - error_handling: 'Robust error handling', - monitoring: 'Continuous monitoring' - }, - results: 'The developed solution successfully processes orders and enables seamless integration between the systems. In particular, automated customer creation and delivery note management have proven to be efficiency boosters.' - } - } - }, - }, - 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', - notFound: { - title: 'Post Not Found', - message: 'The requested blog post does not exist or has been moved.' - } - }, - categories: { - 'Integration': 'Integration', - 'Entwicklung': 'Development', - 'Automatisierung': 'Automation' - } -} as const; - -export type BlogConfig = typeof blog; -export type BlogPost = BlogConfig['posts'][keyof BlogConfig['posts']]; diff --git a/src/i18n/locales-old/en/blog/posts/erp-integration-breuninger.ts b/src/i18n/locales-old/en/blog/posts/erp-integration-breuninger.ts deleted file mode 100644 index 14bc691..0000000 --- a/src/i18n/locales-old/en/blog/posts/erp-integration-breuninger.ts +++ /dev/null @@ -1,138 +0,0 @@ -// src/i18n/locales/en/blog/posts/erp-integration-breuninger.ts -export const erpIntegrationBreuninger = { - posts: { - erp_integration: { - title: "ApparelMagic and TradeByte: Analysis of Complex Integrations", - date: "2024-02-09", - excerpt: "Detailed analysis of an e-commerce integration between Apparel Magic and Breuninger via TradeByte", - category: "System Integration", - tags: ["ERP", "Apparel Magic", "TradeByte", "API Integration", "Python", "MariaDB"], - coverImage: "/images/posts/erp-integration-breuninger/cover.jpg", - intro: { - title: "Apparel Magic meets Breuninger: A Technical Analysis of the TradeByte Integration", - description: "The integration of e-commerce systems with established marketplaces presents unique challenges for companies. In this article, I share my experiences from a complex integration project between Apparel Magic as an ERP system and the Breuninger platform via TradeByte." - }, - background: { - title: "Project Background", - systems: { - erp: "Apparel Magic as an ERP system for product data and inventory management", - middleware: "TradeByte as middleware for the Breuninger platform" - }, - challenges: { - sync: "Bidirectional synchronization of orders", - customers: "Automated customer creation", - delivery: "Management of delivery notes", - inventory: "Real-time inventory management" - } - }, - tech: { - title: "Technical Architecture", - components: { - title: "Central Components" - }, - database: { - title: "Middleware Database", - description: "The MariaDB database serves as the central data store for the integration:" - } - }, - api: { - title: "API Integrations", - apparel_magic: { - title: "Apparel Magic API", - description: "The REST API of Apparel Magic is used for customer creation and inventory management:" - }, - tradebyte: { - title: "TradeByte Integration", - description: "The TradeByte API uses a combination of REST and XML:" - } - }, - order_process: { - title: "Order Process", - steps: { - fetch: "Regular retrieval of new orders from TradeByte", - customers: "Automatic customer creation in Apparel Magic", - process: "Order processing and status update", - delivery: "Generation and storage of delivery notes" - }, - delivery_notes: { - title: "Delivery Note Management" - } - }, - challenges: { - title: "Challenges and Solutions", - status: { - title: "1. Status Management", - description: "A particular challenge was managing order statuses:" - }, - error_handling: { - title: "2. Error Handling and Monitoring", - description: "Robust error handling was essential for production operations:" - } - }, - best_practices: { - title: "Best Practices", - api: { - title: "1. API Communication", - items: { - retry: "Implementation of retry mechanisms", - errors: "Careful error handling", - logging: "Comprehensive logging of all communications" - } - }, - data: { - title: "2. Data Management", - items: { - storage: "Central data storage in MariaDB", - transactions: "Transactional security for critical operations", - validation: "Regular data validation" - } - }, - automation: { - title: "3. Process Automation", - items: { - customers: "Automated customer creation", - status: "Automatic status updates", - delivery: "Systematic delivery note management" - } - } - }, - lessons: { - title: "Lessons Learned", - api: { - title: "1. API Design", - items: { - docs: "Thorough API documentation is essential", - auth: "Understanding of various authentication methods", - limits: "Consideration of rate limits" - } - }, - validation: { - title: "2. Data Validation", - items: { - rules: "Implementation of strict validation rules", - edge_cases: "Careful handling of edge cases", - cleanup: "Automated data cleanup" - } - }, - optimization: { - title: "3. Process Optimization", - items: { - automation: "Continuous improvement of automation", - performance: "Regular performance reviews", - monitoring: "Proactive monitoring" - } - } - }, - conclusion: { - title: "Conclusion", - requirements: { - understanding: "Deep understanding of both systems", - implementation: "Careful implementation of the API communication", - error_handling: "Robust error handling", - monitoring: "Continuous monitoring" - }, - results: "The developed solution successfully processes orders and enables seamless integration between the systems. In particular, the automated customer creation and delivery note management have proven to enhance efficiency." - } - } - } -}; diff --git a/src/i18n/locales-old/en/blog/posts/fullstack-development-timetracking.ts b/src/i18n/locales-old/en/blog/posts/fullstack-development-timetracking.ts deleted file mode 100644 index c4e307e..0000000 --- a/src/i18n/locales-old/en/blog/posts/fullstack-development-timetracking.ts +++ /dev/null @@ -1,253 +0,0 @@ -// src/i18n/locales/en/blog/posts/fullstack-development-timetracking.ts -export const fullstackDevelopmentTimetracking = { - meta: { - title: 'Fullstack Development with Python and React: Architecture of our Time Tracking Solution', - date: '2024-02-09', - excerpt: 'A technical deep dive into the implementation of a modern time tracking solution', - category: 'System Architecture', - coverImage: '/images/posts/fullstack-development-timetracking/cover.jpg', - tags: ['Python', 'React', 'TypeScript', 'MSSQL', 'System Design'] - }, - content: { - intro: { - title: 'Fullstack Development with Python and React: Architecture of our Time Tracking Solution', - description: 'Developing a robust time tracking solution requires not only technical expertise but also a deep understanding of complex business rules and user requirements. In this article, I share our experiences in implementing a modern fullstack time tracking solution with Python and React.' - }, - systemArchitecture: { - title: 'System Architecture', - frontend: { - title: 'Frontend (Next.js + TypeScript)', - description: 'The frontend architecture is based on Next.js with TypeScript and follows a component-based approach:', - code: { - types: `// types/TimeEntry.ts -interface TimeEntry { - id: number; - date: string; - checkIn: string; - checkOut: string | null; - userId: number; - status: 'complete' | 'incomplete'; -}`, - component: `// components/TimeEntryForm.tsx -const TimeEntryForm: React.FC = ({ onSubmit }) => { - const [entry, setEntry] = useState({ - date: new Date().toISOString().split('T')[0], - checkIn: new Date().toLocaleTimeString(), - checkOut: null, - status: 'incomplete' - }); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (!validateTimeEntry(entry)) return; - try { - await onSubmit(entry); - } catch (error) { - console.error('Error submitting time entry:', error); - } - }; - return ( -
- setEntry({ ...entry, date })} - /> - setEntry({ ...entry, checkIn: time })} - /> - {/* Additional form elements */} - - ); -};` - } - }, - backend: { - title: 'Backend (Flask + MSSQL)', - description: 'The backend uses Flask for the API and MSSQL for data persistence:', - code: { - models: `# models/time_entry.py -class TimeEntry(db.Model): - __tablename__ = 'Stundenzettel' - id = db.Column('ID', db.Decimal, primary_key=True) - personal_id = db.Column('Personal_ID', db.Decimal) - datum = db.Column('Datum', db.Date) - kommen = db.Column('Kommen', db.Time) - gehen = db.Column('Gehen', db.Time) - @validates('gehen') - def validate_checkout(self, key, value): - if value and value < self.kommen: - raise ValueError('Checkout time cannot be before checkin time') - return value`, - routes: `# routes/time_entries.py -@app.route('/api/time-entries', methods=['POST']) -@jwt_required -def create_time_entry(): - data = request.get_json() - user_id = get_jwt_identity() - try: - validate_time_entry_creation(data, user_id) - entry = TimeEntry( - personal_id=user_id, - datum=data['date'], - kommen=data['checkIn'], - gehen=data.get('checkOut') - ) - db.session.add(entry) - db.session.commit() - return jsonify(entry.to_dict()), 201 - except ValidationError as e: - return jsonify({'error': str(e)}), 400` - } - } - }, - businessLogic: { - title: 'Business Logic Implementation', - validation: { - title: 'Time Entry Validation', - description: 'The validation logic ensures that all business rules are followed:', - code: `def validate_time_entry_creation(data: dict, user_id: int) -> None: - '''Validates a new time entry according to business rules.''' - # Check for existing incomplete entries - incomplete_entry = TimeEntry.query.filter_by( - personal_id=user_id, - gehen=None, - datum=data['date'] - ).first() - if incomplete_entry: - raise ValidationError('Cannot create new entry while incomplete entry exists') - # Check for time overlap with existing entries - overlapping_entry = TimeEntry.query.filter( - TimeEntry.personal_id == user_id, - TimeEntry.datum == data['date'], - TimeEntry.kommen <= data['checkIn'], - TimeEntry.gehen >= data['checkIn'] - ).first() - if overlapping_entry: - raise ValidationError('Time entry overlaps with existing entry')` - } - }, - databaseDesign: { - title: 'Database Design', - description: 'The MSSQL database schema is designed for efficiency and integrity:', - code: `CREATE TABLE dbo.Stundenzettel ( - ID decimal NOT NULL PRIMARY KEY, - Personal_ID decimal, - Datum date, - Kommen time, - Gehen time, - xStatus int, - xBenutzer nvarchar(15), - xDatum datetime, - xVersion timestamp -); -CREATE INDEX idx_personal_datum -ON dbo.Stundenzettel(Personal_ID, Datum);` - }, - security: { - title: 'Security Implementation', - authentication: { - title: 'JWT Authentication', - code: `# auth/jwt_handler.py -from flask_jwt_extended import create_access_token -def authenticate_user(username: str, password: str) -> str: - user = Personal.query.filter_by( - Benutzername=username, - Passwort=password # In production, use proper password hashing - ).first() - if not user: - raise AuthenticationError('Invalid credentials') - return create_access_token(identity=user.ID)` - } - }, - bestPractices: { - title: 'Best Practices and Learnings', - points: [ - { - title: 'Data Validation at Multiple Levels', - items: [ - 'Frontend validation for immediate feedback', - 'Backend validation for business rules', - 'Database constraints for data integrity' - ] - }, - { - title: 'Error Handling', - items: [ - 'Structured error messages', - 'User-friendly error messages in frontend', - 'Detailed logging in backend' - ] - }, - { - title: 'Performance Optimization', - items: [ - 'Indexing of critical database fields', - 'Frontend caching of time entries', - 'Lazy loading for historical data' - ] - } - ] - }, - challenges: { - title: 'Challenges and Solutions', - timezones: { - title: '1. Timezone Handling', - description: 'A particular challenge was the correct handling of timezones:', - code: `// utils/dateTime.ts -export const formatTimeForDisplay = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toLocaleTimeString('de-DE', { - hour: '2-digit', - minute: '2-digit' - }); -}; -export const formatTimeForAPI = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toISOString().split('T')[1]; -};` - }, - concurrency: { - title: '2. Concurrent Updates', - description: 'Handling concurrent updates required special attention:', - code: `from sqlalchemy import and_, or_ -def update_time_entry(entry_id: int, data: dict) -> TimeEntry: - entry = TimeEntry.query.filter_by(id=entry_id).with_for_update().first() - if not entry: - raise NotFoundError('Time entry not found') - # Optimistic locking using version field - if entry.xVersion != data['version']: - raise ConcurrencyError('Entry was modified by another user') - entry.gehen = data.get('checkOut') - db.session.commit() - return entry` - }, - offline: { - title: '3. Offline Capability', - description: 'For offline functionality, we implemented a service worker strategy:', - code: `// service-worker.ts -const CACHE_NAME = 'timetracking-v1'; -self.addEventListener('fetch', (event) => { - event.respondWith( - caches.match(event.request).then(response => { - return response || fetch(event.request).then(response => { - return caches.open(CACHE_NAME).then(cache => { - cache.put(event.request, response.clone()); - return response; - }); - }); - }) - ); -});` - } - }, - conclusion: { - title: 'Conclusion', - description: 'Developing a time tracking solution requires careful planning and consideration of numerous business rules. By using modern technologies like Next.js, TypeScript, and Flask, we were able to implement a robust and user-friendly solution.', - keyPoints: [ - 'Strict typing with TypeScript', - 'Comprehensive validation logic', - 'Efficient database design', - 'User-friendly error handling' - ], - results: 'The solution has been successfully in use for several months and reliably processes hundreds of time entries daily.' - } - } -}; diff --git a/src/i18n/locales-old/en/blog/posts/rfid-automation.ts b/src/i18n/locales-old/en/blog/posts/rfid-automation.ts deleted file mode 100644 index a899b66..0000000 --- a/src/i18n/locales-old/en/blog/posts/rfid-automation.ts +++ /dev/null @@ -1,204 +0,0 @@ -// src/i18n/locales/en/blog/posts/rfid-automation.ts -export const rfidAutomation = { - meta: { - title: 'RFID Label Automation: From Database to Printer', - date: '2024-02-09', - excerpt: 'A detailed technical analysis of implementing an automated RFID label printing system with Python', - category: 'System Integration', - coverImage: '/images/posts/rfid-automation/cover.jpg', - tags: ['RFID', 'Python', 'ZPL', 'Automation', 'Zebra Printer', 'EPC'] - }, - content: { - intro: { - title: 'RFID Label Automation: From Database to Printer', - description: 'In modern logistics and retail environments, efficient and error-free labeling of products with RFID tags is crucial. In this article, I share my experiences implementing an automated solution for generating and printing RFID labels with chip encoding.' - }, - requirements: { - title: 'Project Background', - points: [ - 'Automatic generation of EPC codes (Electronic Product Code)', - 'Creation of ZPL code for Zebra printers', - 'Direct network communication with the printer', - 'Integration with existing product data', - 'Error handling and logging' - ] - }, - implementation: { - title: 'Technical Implementation', - epcGeneration: { - title: 'EPC Code Generation', - description: 'The EPC codes are generated according to the SGTIN standard (Serialized Global Trade Item Number):', - code: `def generate_encoded_epc(company_prefix, indicator, item_ref, serial): - sgtin = SGTIN(company_prefix, indicator, item_ref, serial) - return sgtin.encode()` - }, - zplTemplates: { - title: 'ZPL Template Management', - description: 'ZPL templates were implemented for different label types:', - code: `def generate_zpl_code(artikelnr, description, ean, price, material, water_resistance, glass_type, encoded_epc): - formatted_price = f'{price:.2f}' - return f''' -CT~~CD,~CC^~CT~ -^XA -~TA000 -~JSN -^LT35 -^MNW -^MTT -^PON -^PMN -^LH0,0 -^JMA -^PR2,2 -~SD23 -^JUS -^LRN -^CI27 -^PA0,1,1,0 -^RS8,,,3 -^XZ -^XA -^MMT -^PW413 -^LL531 -^LS-24 -^FT150,57^A0N,33,33^FH\\^CI27^FD{artikelnr}^FS^CI27 -^FT44,86^A0N,21,20^FH\\^CI27^FD{description}^FS^CI27 -^FT130,141^A0N,50,51^FH\\^CI27^FD{formatted_price} €^FS^CI27 -^FT167,175^A0N,21,20^FH\\^CI27^FD{material}^FS^CI27 -^FT185,201^A0N,21,20^FH\\^CI27^FD{water_resistance}^FS^CI27 -^FT155,227^A0N,21,20^FH\\^CI27^FD{glass_type}^FS^CI27 -^BY3,2,113^FT73,420^BEN,,Y,N -^FH\\^FD{ean}^FS -^RFW,H,1,2,1^FD3000^FS -^RFW,H,2,12,1^FD{encoded_epc}^FS -^PQ1,0,1,Y -^XZ'''` - }, - printerCommunication: { - title: 'Network Communication with the Printer', - description: 'Communication with the Zebra printer is done via TCP/IP:', - code: `def send_to_printer(data, printer_ip='192.168.68.50', printer_port=9100): - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.connect((printer_ip, printer_port)) - sock.sendall(data.encode('utf-8')) - logger.info('Data successfully sent to printer') - except Exception as e: - logger.error(f'Error sending data to printer: {e}')` - }, - serialNumberManagement: { - title: 'Data Processing and Serial Number Management', - description: 'Managing serial numbers is critical for the uniqueness of EPC codes:', - code: `def initialize_serial_number(): - global current_serial_number - try: - serial_log_content = SERIAL_NUMBER_LOG_PATH.read_text().strip() - current_serial_number = int(serial_log_content) - except (FileNotFoundError, ValueError): - current_serial_number = START_SERIAL_NUMBER -def get_next_serial_number(): - global current_serial_number - current_serial_number += 1 - return current_serial_number -def finalize_serial_number(): - SERIAL_NUMBER_LOG_PATH.write_text(str(current_serial_number))` - } - }, - features: { - title: 'Implemented Features', - errorHandling: { - title: '1. Robust Error Handling', - points: [ - 'Input data validation', - 'Network connection verification', - 'Serial number persistence', - 'Detailed logging of all operations' - ] - }, - configurability: { - title: '2. Configurability', - points: [ - 'Adjustable printer IP and port', - 'Customizable ZPL templates', - 'Flexible EPC code generation', - 'Configurable serial number ranges' - ] - }, - scalability: { - title: '3. Scalability', - points: [ - 'Batch processing of product data', - 'Parallel print jobs possible', - 'Efficient resource management', - 'Modular code for easy extensibility' - ] - } - }, - bestPractices: { - title: 'Best Practices', - dataValidation: { - title: '1. Data Validation', - points: [ - 'Strict typing for critical data fields', - 'Verification of required fields', - 'Format and plausibility checks' - ] - }, - faultTolerance: { - title: '2. Fault Tolerance', - points: [ - 'Automatic retry attempts', - 'Graceful degradation', - 'Detailed error logs' - ] - }, - maintainability: { - title: '3. Maintainability', - points: [ - 'Modular code structure', - 'Comprehensive documentation', - 'Clear separation of configuration and code' - ] - } - }, - lessonsLearned: { - title: 'Lessons Learned', - zplSpecifics: { - title: '1. ZPL Specifics', - points: [ - 'Detailed knowledge of ZPL specifications necessary', - 'Careful validation of generated ZPL codes', - 'Regular testing with different printer models' - ] - }, - rfidStandards: { - title: '2. RFID Standards', - points: [ - 'Adherence to EPC standards critical', - 'Careful management of serial numbers', - 'Validation of generated EPC codes' - ] - }, - networkCommunication: { - title: '3. Network Communication', - points: [ - 'Robust error handling for network issues', - 'Timeouts and retry attempts', - 'Buffering of print jobs' - ] - } - }, - conclusion: { - title: 'Conclusion', - description: 'The implemented solution enables efficient and reliable automation of the RFID labeling process. Through the combination of EPC code generation, ZPL template management, and direct printer communication, a robust system has been created that has proven itself in practice.', - keyPoints: [ - 'Thorough planning of system architecture', - 'Comprehensive error handling', - 'Careful documentation', - 'Regular testing and validation' - ], - results: 'The solution has been running stably in production for several months and processes hundreds of labels daily.' - } - } -}; diff --git a/src/i18n/locales-old/en/common.ts b/src/i18n/locales-old/en/common.ts deleted file mode 100644 index b451f1c..0000000 --- a/src/i18n/locales-old/en/common.ts +++ /dev/null @@ -1,99 +0,0 @@ -export const common = { - // SEO & Meta - siteTitle: 'Damjan Savić - Digital Solutions & JTL Integration', - siteDescription: 'Developer of custom solutions for process automation', - // Navigation - nav: { - home: 'Home', - about: 'About', - services: 'Services', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Contact' - }, - // Common Actions - actions: { - readMore: 'Read More', - viewMore: 'View More', - viewAll: 'View All', - back: 'Back', - close: 'Close', - submit: 'Submit', - loading: 'Loading...' - }, - // UI Components - ui: { - published: 'Published on', - lastUpdated: 'Last updated on', - category: 'Category', - categories: 'Categories', - tag: 'Tag', - tags: 'Tags', - author: 'Author', - minuteRead: 'minute read', - tableOfContents: 'Table of Contents' - }, - // Error Messages - errors: { - generic: 'An error has occurred', - notFound: 'Page not found', - loading: 'Error loading', - return: 'Return to homepage' - }, - // Loading States - loading: { - content: 'Loading content', - page: 'Loading page', - processing: 'Processing' - }, - // Dates - dates: { - months: { - long: [ - 'January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December' - ], - short: [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ] - }, - weekdays: { - long: [ - 'Sunday', 'Monday', 'Tuesday', 'Wednesday', - 'Thursday', 'Friday', 'Saturday' - ], - short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] - } - }, - // Social Media - social: { - followMe: 'Follow me on', - shareOn: 'Share on', - linkedin: 'LinkedIn', - github: 'GitHub', - email: 'Email' - }, - // Contact Form - contact: { - title: 'Contact', - name: 'Name', - email: 'Email', - message: 'Message', - submit: 'Send Message', - success: 'Your message has been sent successfully', - error: 'There was an error sending your message' - }, - // Accessibility - a11y: { - skipToContent: 'Skip to main content', - menuOpen: 'Open menu', - menuClose: 'Close menu', - darkMode: 'Toggle dark mode', - carousel: { - next: 'Next image', - previous: 'Previous image' - } - } -} as const; -export type CommonTranslations = typeof common; diff --git a/src/i18n/locales-old/en/cookiebanner.ts b/src/i18n/locales-old/en/cookiebanner.ts deleted file mode 100644 index 1810718..0000000 --- a/src/i18n/locales-old/en/cookiebanner.ts +++ /dev/null @@ -1,14 +0,0 @@ -const cookiebanner = { - cookies: { - message: "This website uses cookies to enhance your browsing experience. The data will not be shared with third parties.", - accept: "Accept Cookies", - decline: "Decline", - necessary: "Necessary Cookies", - necessaryDesc: "For basic website functions", - analytics: "Analytics Cookies", - analyticsDesc: "For analyzing website usage", - learnMore: "Learn more" - } -}; - -export default cookiebanner; \ No newline at end of file diff --git a/src/i18n/locales-old/en/faq.ts b/src/i18n/locales-old/en/faq.ts deleted file mode 100644 index 2e5d775..0000000 --- a/src/i18n/locales-old/en/faq.ts +++ /dev/null @@ -1,37 +0,0 @@ -export const faq = { - title: 'Frequently Asked Questions', - moreQuestions: 'Have more questions?', - contactUs: 'Contact us', - questions: [ - { - question: "How can I use Python for process automation?", - answer: "Python excels at process automation through libraries like Selenium for web automation, Pandas for data processing, and Schedule for timed tasks. I develop custom automation solutions tailored to your business processes.", - category: "python" - }, - { - question: "What makes OLLAMA ideal for local AI development?", - answer: "OLLAMA enables running large language models locally, ensuring data privacy and reducing API costs. I specialize in integrating OLLAMA into applications for custom AI solutions without cloud dependencies.", - category: "ai" - }, - { - question: "What are the advantages of Electron desktop apps?", - answer: "Electron enables cross-platform desktop app development using web technologies. You get a native app for Windows, Mac, and Linux from a single codebase. Ideal for tools requiring complex UI and offline functionality.", - category: "electron" - }, - { - question: "How long does web application development take?", - answer: "Development time depends on scope. An MVP can be developed in 4-8 weeks, while complex enterprise applications require 3-6 months. I work agile and deliver usable results in 2-week sprints.", - category: "general" - }, - { - question: "Can you convert existing Python scripts into web apps?", - answer: "Yes, I can transform your Python scripts into modern web applications with FastAPI or Django backend and React frontend. This enables multi-user access, better UI/UX, and centralized data management.", - category: "python" - }, - { - question: "How do you integrate AI into existing business processes?", - answer: "I analyze your workflows and identify automation potential. Using OLLAMA or other AI models, I develop solutions for text analysis, document processing, customer service automation, or data extraction - all privacy-compliant on-premise.", - category: "ai" - } - ] -}; \ No newline at end of file diff --git a/src/i18n/locales-old/en/footer.ts b/src/i18n/locales-old/en/footer.ts deleted file mode 100644 index 9ad66fa..0000000 --- a/src/i18n/locales-old/en/footer.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/en/footer.ts -const footer = { - sections: { - contact: { - title: "Contact", - email: "info@damjan-savic.com", - location: "Cologne, Germany", - aria: { - emailLink: "Send email", - locationText: "Location" - } - }, - navigation: { - title: "Navigation", - links: { - portfolio: "Portfolio", - blog: "Blog", - about: "About", - contact: "Contact" - } - }, - social: { - title: "Social Media", - aria: { - linkedin: "Visit my LinkedIn profile", - github: "Visit my GitHub profile" - } - } - }, - legal: { - copyright: "All rights reserved", - links: { - privacy: "Privacy Policy", - imprint: "Imprint", - terms: "Terms of Service" - } - } -} as const; - -export default footer; -export type FooterTranslations = typeof footer; \ No newline at end of file diff --git a/src/i18n/locales-old/en/index.ts b/src/i18n/locales-old/en/index.ts deleted file mode 100644 index 46e52cd..0000000 --- a/src/i18n/locales-old/en/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -// src/i18n/locales/en/index.ts - -// Blog post translations -import { erpIntegrationBreuninger } from './blog/posts/erp-integration-breuninger'; -import { fullstackDevelopmentTimetracking } from './blog/posts/fullstack-development-timetracking'; -import { rfidAutomation as blogRfidAutomation } from './blog/posts/rfid-automation'; -import { blog } from './blog'; - -// Page translations -import { about } from './pages/about/index'; -import { contact } from './pages/contact/index'; -import { dashboard } from './pages/dashboard'; -import { home } from './pages/home/index'; -import { login } from './pages/login'; -import { notfound } from './pages/notfound'; -import { portfolio as portfolioPage } from './pages/portfolio'; -import { privacy } from './pages/privacy'; -import { terms } from './pages/terms'; - -// Portfolio project translations -import { aiDataReader } from './portfolio/projects/ai-data-reader'; -import { portfolio } from './portfolio'; - -// Common translations and configurations -import { common } from './common'; -import { meta } from './meta'; -import { navigation } from './navigation'; - -// Footer translations -import footer from './footer'; - -// FAQ translations -import { faq } from './faq'; - -// Merging all translation objects -const translations = { - // Pages - pages: { - about, - contact, - dashboard, - home, - login, - notfound, - portfolio: portfolioPage, - privacy, - terms, - }, - // Blog - blog: { - ...blog, - posts: { - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - rfidAutomation: blogRfidAutomation, - }, - }, - // Portfolio - portfolio: { - ...portfolio, - projects: { - aiDataReader, - }, - }, - // Footer - footer, - // Common configurations - common: { - ...common, - cookies: { - message: "This website uses cookies to enhance your browsing experience and provide personalized content. The collected data will not be shared with third parties.", - accept: "Accept Cookies", - decline: "Decline", - necessary: "Necessary Cookies", - necessaryDesc: "For basic website functions", - analytics: "Analytics Cookies", - analyticsDesc: "For analyzing website usage", - learnMore: "Learn more" - } - }, - meta, - navigation, - faq, -} as const; - -// Default export: complete translations object -export default translations; - -// Type definition for translations -export type Translations = typeof translations; - -// Re-exports for direct access to individual modules -export { - // Pages - about, - contact, - dashboard, - home, - login, - notfound, - portfolioPage as portfolioPageTranslations, - privacy, - terms, - // Blog - blog, - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - blogRfidAutomation as blogRfidAutomationPost, - // Portfolio - portfolio, - aiDataReader, - // Footer - footer, - // Common - common, - meta, - navigation, - faq, -}; \ No newline at end of file diff --git a/src/i18n/locales-old/en/meta.ts b/src/i18n/locales-old/en/meta.ts deleted file mode 100644 index 58ea0ab..0000000 --- a/src/i18n/locales-old/en/meta.ts +++ /dev/null @@ -1,193 +0,0 @@ -export const meta = { - site: { - name: 'Damjan Savić', - title: 'Damjan Savić | Fullstack, IoT & AI Developer', - subtitle: 'Scalable Software Solutions with IoT and AI Integration', - description: 'As a fullstack developer from Cologne, Damjan Savić specializes in building scalable software solutions with IoT and AI integration.', - keywords: [ - // Name & Branding - 'Damjan Savić', - 'Damjan Savic', - 'CoderConda', - - // Voice AI & Agents - 'Voice AI Developer', - 'VAPI Integration Developer', - 'Voice AI Recruiting', - 'Voice Assistant Development', - 'Conversational AI Developer', - 'AI Voice Agent Development', - 'Autonomous AI Agents', - 'n8n Automation Developer', - 'AI Workflow Automation', - - // AI & LLM Integration (NEW - Claude/GPT) - 'Claude API Integration', - 'Anthropic Developer', - 'GPT-4 Integration Developer', - 'LLM Developer', - 'AI Automation', - 'AI Agent Development', - 'Prompt Engineering', - 'RAG Development', - 'OLLAMA AI Integration', - - // HR-Tech & Recruiting - 'Recruiting Automation', - 'HR Software Development', - 'AI Interview Software', - 'HR Tech Developer', - 'Talent Acquisition Software', - - // Fullstack & Core Skills - 'Senior Fullstack Developer Cologne', - 'Digital Solutions Consultant Germany', - 'Software Architect', - 'Python Developer Germany', - 'React Developer', - 'Next.js Developer', - 'TypeScript Developer', - 'Full Stack Developer Europe', - - // Backend & API - 'Python FastAPI Developer', - 'Microservices Developer', - 'Backend Developer', - 'Node.js Developer', - 'Django Developer', - 'API Development', - - // Frontend - 'Frontend Developer', - 'JavaScript Developer', - 'React Native Developer', - 'Progressive Web App Development', - - // Automation & Integration - 'Process Automation Python', - 'ERP System Integration', - 'E-Commerce Integration', - 'Workflow Automation', - 'RPA Developer', - - // Enterprise & B2B - 'Enterprise Software Developer', - 'B2B Software Development', - 'Custom Software Development', - 'Freelance Developer Europe', - 'Remote Developer', - - // DevOps & Cloud - 'AWS Cloud Architect', - 'DevOps Engineer', - 'Docker Kubernetes Expert', - 'Electron Desktop Applications' - ].join(', ') - }, - company: { - name: 'Damjan Savić', - shortName: 'Damjan Savić', - description: 'Damjan Savić and CoderConda - Your partner for Enterprise Software Development, digital transformation, and innovative IT solutions.', - address: 'Rotdornallee', - city: 'Köln', - postalCode: '50999', - country: 'Germany', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - website: 'www.damjan-savic.com' - }, - author: { - name: 'Damjan Savić', - role: 'Senior Fullstack Developer & Digital Solutions Consultant', - company: 'CoderConda', - location: 'Cologne, Germany', - email: 'info@damjan-savic.com', - website: 'www.damjan-savic.com', - languages: [ - { code: 'en', level: 'C2', name: 'English' }, - { code: 'sr', level: 'C2', name: 'Serbian' }, - { code: 'de', level: 'C2', name: 'German' }, - { code: 'fr', level: 'B2', name: 'French' }, - { code: 'es', level: 'B2', name: 'Spanish' }, - { code: 'ru', level: 'A1', name: 'Russian' } - ] - }, - social: { - linkedin: 'https://www.linkedin.com/in/damjansavic/', - github: 'https://github.com/damjansavic', - email: 'info@damjan-savic.com' - }, - expertise: { - areas: [ - // Voice AI & Agents (Priority) - 'Voice AI Development with VAPI', - 'Autonomous AI Agents', - 'n8n Workflow Automation', - 'Conversational AI & Chatbots', - - // LLM & AI Integration - 'Claude API Integration', - 'GPT-4 & OpenAI Integration', - 'OLLAMA & Local LLMs', - 'RAG & Prompt Engineering', - - // Fullstack Development - 'Enterprise Software Development', - 'Python Backend Development', - 'React & Next.js Frontend', - 'TypeScript & JavaScript', - - // Integration & Automation - 'ERP System Integration', - 'E-Commerce Platforms', - 'Business Process Automation', - 'Microservices & API Development' - ], - technologies: [ - // AI & LLM - 'Claude AI', - 'GPT-4', - 'VAPI', - 'OLLAMA', - 'n8n', - 'LangChain', - - // Languages & Frameworks - 'Python', - 'TypeScript', - 'React', - 'Next.js', - 'Node.js', - 'FastAPI', - - // Infrastructure - 'Docker', - 'AWS', - 'PostgreSQL', - 'MongoDB' - ] - }, - seo: { - defaultLanguage: 'en', - alternateLanguages: ['de', 'sr'], - robots: 'index, follow', - googleSiteVerification: '', // If needed - og: { - type: 'website', - locale: 'en_US', - siteName: 'Damjan Savić - Senior Developer & IT Consultant Portfolio', - images: { - url: '/images/og-image.jpg', - width: 1200, - height: 630, - alt: 'Damjan Savić - Senior Fullstack Developer & Digital Solutions Consultant | Enterprise Software, AI Integration, Cloud Architecture' - } - }, - twitter: { - card: 'summary_large_image', - site: '@damjansavic', - creator: '@damjansavic' - } - } -} as const; -export type MetaConfig = typeof meta; diff --git a/src/i18n/locales-old/en/navigation.ts b/src/i18n/locales-old/en/navigation.ts deleted file mode 100644 index 402666f..0000000 --- a/src/i18n/locales-old/en/navigation.ts +++ /dev/null @@ -1,79 +0,0 @@ -// C:\Development\Damjan Savic\Portfolio\src\i18n\locales\en\navigation.ts -export const navigation = { - // Main navigation - main: { - home: 'Home', - about: 'About', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Contact' - }, - // Dashboard and Admin - admin: { - login: 'Login', - dashboard: 'Dashboard', - logout: 'Logout' - }, - // Footer Navigation - footer: { - legal: { - privacy: 'Privacy Policy', - terms: 'Terms & Conditions', - imprint: 'Imprint' - }, - sections: { - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Contact' - } - }, - // Page sections - sections: { - experience: 'Experience', - skills: 'Skills', - projects: 'Projects', - about: 'About' - }, - // Breadcrumbs and back navigation - navigation: { - backTo: { - home: 'Back to Home', - portfolio: 'Back to Portfolio', - blog: 'Back to Blog' - }, - breadcrumbs: { - home: 'Home', - portfolio: 'Portfolio', - blog: 'Blog', - about: 'About', - contact: 'Contact' - } - }, - // Mobile Navigation - mobile: { - menu: 'Menu', - close: 'Close', - open: 'Open Menu' - }, - // URLs (for dynamic route generation) - urls: { - home: '/', - about: '/about', - portfolio: '/portfolio', - blog: '/blog', - contact: '/contact', - login: '/login', - dashboard: '/dashboard', - privacy: '/privacy', - terms: '/terms' - }, - // Meta information for navigation - meta: { - main: 'Main Navigation', - footer: 'Footer Navigation', - social: 'Social Media Navigation', - legal: 'Legal Navigation' - } -} as const; - -export type NavigationConfig = typeof navigation; diff --git a/src/i18n/locales-old/en/pages/about/hero.ts b/src/i18n/locales-old/en/pages/about/hero.ts deleted file mode 100644 index c0bfb0e..0000000 --- a/src/i18n/locales-old/en/pages/about/hero.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const hero = { - // Navigation/Header - aboutMe: 'ABOUT ME', - // Main Section - title: 'Digital Solutions Expert', - description: 'With a background in software development and expertise in digital transformation, I help companies optimize and automate their processes through innovative solutions.', - // Expertise Areas - expertise: { - processAutomation: { - title: 'Process Automation', - description: 'Development of efficient automated workflows' - }, - systemIntegration: { - title: 'System Integration', - description: 'Connection and optimization of business systems' - }, - customDevelopment: { - title: 'Custom Development', - description: 'Creation of tailored software solutions' - } - }, - // Languages - languages: { - english: 'English', - serbian: 'Serbian', - german: 'German', - french: 'French', - spanish: 'Spanish', - russian: 'Russian' - } -} as const; -// Type for type safety -export type HeroTranslations = typeof hero; diff --git a/src/i18n/locales-old/en/pages/about/index.ts b/src/i18n/locales-old/en/pages/about/index.ts deleted file mode 100644 index 1007bcf..0000000 --- a/src/i18n/locales-old/en/pages/about/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { hero } from './hero'; -import { journey } from './journey'; -import { schema } from './schema'; -import { skillbar } from './skillbar'; -import { skillgroup } from './skillgroup'; -import { skills } from './skills'; -import { workflow } from './workflow'; -export const about = { - seo: { - title: 'About Me - Damjan Savić | Fullstack Developer & AI Specialist', - description: 'Learn more about Damjan Savić - AI & Automation Specialist focused on Voice AI, autonomous agents, and process automation from Cologne, Germany.' - }, - hero, - journey, - schema, - skillbar, - skillgroup, - skills, - workflow -} as const; -// Typen exportieren -export type { HeroTranslations } from './hero'; -export type { JourneyTranslations } from './journey'; -export type { SchemaTranslations } from './schema'; -export type { SkillBarTranslations } from './skillbar'; -export type { SkillGroupTranslations } from './skillgroup'; -export type { SkillsTranslations } from './skills'; -export type { WorkflowTranslations } from './workflow'; diff --git a/src/i18n/locales-old/en/pages/about/journey.ts b/src/i18n/locales-old/en/pages/about/journey.ts deleted file mode 100644 index e5e3845..0000000 --- a/src/i18n/locales-old/en/pages/about/journey.ts +++ /dev/null @@ -1,95 +0,0 @@ -export const journey = { - // Header - title: 'Professional Journey', - subtitle: 'From digital media to enterprise solutions', - // Education Section - education: { - title: 'Education', - degrees: { - masters: { - degree: 'M.A. Software Development', - university: 'Middlesex University, London', - period: '2020 - 2022' - }, - bachelors: { - degree: 'B.A. Cross-Media Production', - university: 'Middlesex University, London', - period: '2018 - 2020' - } - } - }, - // Languages Section - languages: { - title: 'Languages', - items: { - english: { - name: 'English', - level: 'C2' - }, - serbian: { - name: 'Serbian', - level: 'C2' - }, - german: { - name: 'German', - level: 'C2' - }, - french: { - name: 'French', - level: 'B2' - }, - spanish: { - name: 'Spanish', - level: 'B2' - }, - russian: { - name: 'Russian', - level: 'A1' - } - } - }, - // Work History - work: { - positions: [ - { - period: '08/2023 - Present', - company: 'Ritter Digital GmbH', - title: 'Digital Solutions Consultant', - location: 'Oberhausen', - highlights: [ - 'ERP consulting and implementation (JTL WaWi)', - 'Process automation & full-stack development', - 'RFID technology & automation', - 'Lead generation & management', - 'AI-supported content management' - ] - }, - { - period: '02/2023 - 08/2023', - company: 'Joyce & Girls Co AG', - title: 'ERP Integration Specialist', - location: 'Köln', - highlights: [ - 'Complex system integration (Apparel Magic, TradeByte)', - 'Server administration and automation', - 'Database and API development', - 'Digital marketing and campaign analysis' - ] - }, - { - period: '08/2022 - 01/2023', - company: 'Magnarius', - title: 'RPA Developer & E-Commerce Manager', - location: 'Bergisch Gladbach', - highlights: [ - 'Shopware 6 development and JTL integration', - 'Google Ads automation', - 'CMS management and optimization', - 'SEO strategy implementation' - ] - } - ] - } -} as const; -// Type for type safety -export type JourneyTranslations = typeof journey; diff --git a/src/i18n/locales-old/en/pages/about/schema.ts b/src/i18n/locales-old/en/pages/about/schema.ts deleted file mode 100644 index 62ac356..0000000 --- a/src/i18n/locales-old/en/pages/about/schema.ts +++ /dev/null @@ -1,31 +0,0 @@ -export const schema = { - page: { - name: 'About Damjan Savić', - description: 'Learn more about Damjan Savić, a certified JTL expert with extensive experience in e-commerce and warehouse management solutions.' - }, - person: { - jobTitle: 'JTL Integration Expert', - description: 'With extensive experience in integrating and optimizing e-commerce systems, I help companies with the digital transformation of their business processes.', - languages: { - english: 'English', - serbian: 'Serbian', - german: 'German', - french: 'French', - spanish: 'Spanish', - russian: 'Russian' - }, - skills: { - python: 'Python', - googleAds: 'Google Ads', - metaAds: 'Meta Ads', - shopware: 'Shopware', - shopify: 'Shopify', - wooCommerce: 'WooCommerce', - jtlWawi: 'JTL WAWI', - serverAdmin: 'Server Administration', - airflow: 'AirFlow' - } - } -} as const; -// Type for type safety -export type SchemaTranslations = typeof schema; diff --git a/src/i18n/locales-old/en/pages/about/skillbar.ts b/src/i18n/locales-old/en/pages/about/skillbar.ts deleted file mode 100644 index 47e3a85..0000000 --- a/src/i18n/locales-old/en/pages/about/skillbar.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const skillbar = { - // Accessibility labels - ariaLabel: { - skillLevel: 'Skill Level', - progressBar: 'Progress Bar' - }, - // Screen reader text - screenReader: { - progress: '{{level}} percent progress for {{skill}}' - } -} as const; -// Type for type safety -export type SkillBarTranslations = typeof skillbar; diff --git a/src/i18n/locales-old/en/pages/about/skillgroup.ts b/src/i18n/locales-old/en/pages/about/skillgroup.ts deleted file mode 100644 index ed5197c..0000000 --- a/src/i18n/locales-old/en/pages/about/skillgroup.ts +++ /dev/null @@ -1,63 +0,0 @@ -export const skillgroup = { - // Categories - categories: { - development: 'Development', - ecommerce: 'E-Commerce', - marketing: 'Marketing', - automation: 'Automation', - languages: 'Programming Languages', - databases: 'Databases' - }, - // Skills by category - skills: { - development: { - frontend: 'Frontend Development', - backend: 'Backend Development', - fullstack: 'Full-Stack Development', - api: 'API Development', - testing: 'Software Testing' - }, - ecommerce: { - jtl: 'JTL WaWi', - shopware: 'Shopware', - shopify: 'Shopify', - woocommerce: 'WooCommerce', - magento: 'Magento' - }, - marketing: { - seo: 'Search Engine Optimization', - sea: 'Search Engine Advertising', - analytics: 'Web Analytics', - googleAds: 'Google Ads', - metaAds: 'Meta Ads' - }, - automation: { - rpa: 'Robotic Process Automation', - workflow: 'Workflow Automation', - cicd: 'CI/CD', - testing: 'Test Automation', - deployment: 'Deployment Automation' - }, - languages: { - python: 'Python', - javascript: 'JavaScript', - typescript: 'TypeScript', - php: 'PHP', - sql: 'SQL' - }, - databases: { - mysql: 'MySQL', - postgresql: 'PostgreSQL', - mongodb: 'MongoDB', - redis: 'Redis', - elasticsearch: 'Elasticsearch' - } - }, - // Accessibility - ariaLabels: { - skillGroup: 'Skill Group', - skillList: 'List of skills in this category' - } -} as const; -// Type for type safety -export type SkillGroupTranslations = typeof skillgroup; diff --git a/src/i18n/locales-old/en/pages/about/skills.ts b/src/i18n/locales-old/en/pages/about/skills.ts deleted file mode 100644 index 666e6c2..0000000 --- a/src/i18n/locales-old/en/pages/about/skills.ts +++ /dev/null @@ -1,46 +0,0 @@ -// en/pages/about/skills.ts -export const skills = { - title: 'Skills', - skillGroups: [ - { - category: 'Development', - items: [ - { name: 'Python', level: 90 }, - { name: 'Google Ads', level: 85 }, - { name: 'Meta Ads', level: 85 } - ] - }, - { - category: 'E-Commerce', - items: [ - { name: 'Shopware', level: 85 }, - { name: 'Shopify', level: 85 }, - { name: 'WooCommerce', level: 85 } - ] - }, - { - category: 'System Administration', - items: [ - { name: 'JTL WAWI', level: 85 }, - { name: 'Server', level: 75 }, - { name: 'AirFlow', level: 60 } - ] - } - ], - ui: { - percentage: 'percent', - levelLabel: 'Level', - skillLevel: '{{level}}% proficiency in {{skill}}' - }, - aria: { - skillGroup: 'Skill group for {{category}}', - skillBar: 'Progress bar for {{skill}}', - skillIcon: 'Icon for {{category}}', - selectSkill: 'Select skill' - }, - screenReader: { - skillProgress: '{{skill}} with a level of {{level}} percent' - } -} as const; - -export type SkillsTranslations = typeof skills; diff --git a/src/i18n/locales-old/en/pages/about/workflow.ts b/src/i18n/locales-old/en/pages/about/workflow.ts deleted file mode 100644 index d3463e8..0000000 --- a/src/i18n/locales-old/en/pages/about/workflow.ts +++ /dev/null @@ -1,44 +0,0 @@ -export const workflow = { - // Page title - title: 'MY WORKFLOW', - description: 'Systematic approach to software development through defined steps', - // Workflow steps - steps: [ - { - number: '01', - title: 'REQUIREMENTS ANALYSIS' - }, - { - number: '02', - title: 'ASSESSMENT OF DEADLINES AND CONSTRAINTS' - }, - { - number: '03', - title: 'DEVELOPMENT ENVIRONMENT SETUP' - }, - { - number: '04', - title: 'PROGRAMMING' - }, - { - number: '05', - title: 'TESTING THE RESULTS' - }, - { - number: '06', - title: 'CODE SUPPORT AND SCALING' - } - ], - // Aria Labels for accessibility - aria: { - workflowSection: 'Workflow Process', - stepNumber: 'Step {{number}}', - stepDescription: 'Workflow step: {{title}}' - }, - // Screen Reader texts - screenReader: { - stepProgress: 'Step {{number}} of {{total}}: {{title}}' - } -} as const; -// Type for type safety -export type WorkflowTranslations = typeof workflow; \ No newline at end of file diff --git a/src/i18n/locales-old/en/pages/contact/contactform.ts b/src/i18n/locales-old/en/pages/contact/contactform.ts deleted file mode 100644 index a56ca23..0000000 --- a/src/i18n/locales-old/en/pages/contact/contactform.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/en/pages/contact/contactform.ts -export const contactform = { - // Form Header - title: 'Contact Me', - description: 'Have questions or want to collaborate? Send me a message.', - // Form Fields - name: { - label: 'Name', - placeholder: 'Your full name' - }, - email: { - label: 'Email', - placeholder: 'your.email@example.com' - }, - message: { - label: 'Message', - placeholder: 'Your message to me...' - }, - // Button - submit: 'Send Message', - // Status Messages - 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. Please try again later.', - // Error Messages - errors: { - nameRequired: 'Please enter your name', - emailRequired: 'Please enter your email address', - emailInvalid: 'Please enter a valid email address', - messageRequired: 'Please enter a message' - }, - // Aria Labels - aria: { - form: 'Contact form', - submitting: 'Sending form', - successAlert: 'Success message', - errorAlert: 'Error message' - } -} as const; - -// Type for type safety -export type ContactFormTranslations = typeof contactform; \ No newline at end of file diff --git a/src/i18n/locales-old/en/pages/contact/contactinfo.ts b/src/i18n/locales-old/en/pages/contact/contactinfo.ts deleted file mode 100644 index b46cbef..0000000 --- a/src/i18n/locales-old/en/pages/contact/contactinfo.ts +++ /dev/null @@ -1,27 +0,0 @@ -// src/i18n/locales/en/pages/contact/contactinfo.ts -export const contactinfo = { - // Header - title: 'Contact Information', - description: 'You can reach me through the following channels', - // Contact Method Labels - addressLabel: 'Office Location', - phoneLabel: 'Phone', - emailLabel: 'Email', - // Contact Information - address: 'Rotdornallee, Köln', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - // Additional Information - availabilityNote: 'Business hours: Monday to Friday, 9:00 AM - 5:00 PM', - // Aria Labels - aria: { - contactCard: 'Contact information card', - addressLink: 'Open location in Google Maps', - phoneLink: 'Call', - emailLink: 'Send email', - externalLink: 'Opens in new tab' - } -} as const; - -// Type for type safety -export type ContactInfoTranslations = typeof contactinfo; \ No newline at end of file diff --git a/src/i18n/locales-old/en/pages/contact/index.ts b/src/i18n/locales-old/en/pages/contact/index.ts deleted file mode 100644 index 45721c7..0000000 --- a/src/i18n/locales-old/en/pages/contact/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -// src/i18n/locales/en/pages/contact/index.ts -export const 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, Köln" - }, - phone: { - label: "Phone", - value: "+49 175 695 0979" - }, - email: { - label: "Email", - value: "info@damjan-savic.com" - }, - availabilityNote: "Business hours: Monday to Friday, 9:00 AM - 5:00 PM", - aria: { - contactCard: "Contact information card", - addressLink: "Open location in Google Maps", - phoneLink: "Call", - emailLink: "Send email", - externalLink: "Opens in new tab" - } - }, - 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. Please try again later.", - errors: { - nameRequired: "Please enter your name", - emailRequired: "Please enter your email address", - emailInvalid: "Please enter a valid email address", - messageRequired: "Please enter a message" - }, - aria: { - form: "Contact form", - submitting: "Sending form", - successAlert: "Success message", - errorAlert: "Error message" - } - } -} as const; - -export type ContactTranslations = typeof contact; - -export default { - pages: { - contact: contact - } -}; \ No newline at end of file diff --git a/src/i18n/locales-old/en/pages/dashboard.ts b/src/i18n/locales-old/en/pages/dashboard.ts deleted file mode 100644 index f9313ba..0000000 --- a/src/i18n/locales-old/en/pages/dashboard.ts +++ /dev/null @@ -1,76 +0,0 @@ -// src/i18n/locales/en/pages/dashboard.ts -export const dashboard = { - // SEO - seo: { - title: 'Analytics Dashboard', - description: 'Website Analysis Dashboard' - }, - // Main headings - header: { - title: 'Analytics Dashboard', - activeUsers: 'active users' - }, - // Metric cards - 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' - } - }, - // Top pages section - topPages: { - title: 'Top Pages', - columns: { - path: 'Path', - views: 'Views', - change: 'Change' - } - }, - // Event tracking section - events: { - title: 'Event Tracking', - types: { - contactForm: 'Contact Form Submission', - portfolioView: 'Portfolio View', - cvDownload: 'CV Download', - blogRead: 'Blog Read' - } - }, - // Status messages - status: { - loading: 'Loading Dashboard...', - error: 'Error loading data', - notAuthenticated: 'Please sign in' - }, - // Miscellaneous - misc: { - viewMore: 'View More', - refresh: 'Refresh', - period: { - today: 'Today', - yesterday: 'Yesterday', - last7Days: 'Last 7 Days', - last30Days: 'Last 30 Days', - thisMonth: 'This Month', - lastMonth: 'Last Month' - } - }, - // Trends and changes - trends: { - increase: 'Increase', - decrease: 'Decrease', - noChange: 'No Change' - } -}; diff --git a/src/i18n/locales-old/en/pages/home/about.ts b/src/i18n/locales-old/en/pages/home/about.ts deleted file mode 100644 index b6d9132..0000000 --- a/src/i18n/locales-old/en/pages/home/about.ts +++ /dev/null @@ -1,13 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/home/experience.ts b/src/i18n/locales-old/en/pages/home/experience.ts deleted file mode 100644 index 66e1406..0000000 --- a/src/i18n/locales-old/en/pages/home/experience.ts +++ /dev/null @@ -1,86 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/home/expertise.ts b/src/i18n/locales-old/en/pages/home/expertise.ts deleted file mode 100644 index e68be96..0000000 --- a/src/i18n/locales-old/en/pages/home/expertise.ts +++ /dev/null @@ -1,27 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/home/hero.ts b/src/i18n/locales-old/en/pages/home/hero.ts deleted file mode 100644 index 56f371b..0000000 --- a/src/i18n/locales-old/en/pages/home/hero.ts +++ /dev/null @@ -1,31 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/home/index.ts b/src/i18n/locales-old/en/pages/home/index.ts deleted file mode 100644 index 21f729d..0000000 --- a/src/i18n/locales-old/en/pages/home/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -// 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 -}; diff --git a/src/i18n/locales-old/en/pages/home/projects.ts b/src/i18n/locales-old/en/pages/home/projects.ts deleted file mode 100644 index 54963e2..0000000 --- a/src/i18n/locales-old/en/pages/home/projects.ts +++ /dev/null @@ -1,10 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/home/skills.ts b/src/i18n/locales-old/en/pages/home/skills.ts deleted file mode 100644 index babff28..0000000 --- a/src/i18n/locales-old/en/pages/home/skills.ts +++ /dev/null @@ -1,41 +0,0 @@ -// 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; diff --git a/src/i18n/locales-old/en/pages/login.ts b/src/i18n/locales-old/en/pages/login.ts deleted file mode 100644 index 017161a..0000000 --- a/src/i18n/locales-old/en/pages/login.ts +++ /dev/null @@ -1,54 +0,0 @@ -// src/i18n/locales/en/pages/login.ts -export const login = { - // SEO - seo: { - title: 'Login', - description: 'Sign in to access the dashboard' - }, - // Main heading - header: { - title: 'Sign in to Dashboard' - }, - // Form - form: { - // Fields - email: { - label: 'Email Address', - placeholder: 'your.email@example.com' - }, - password: { - label: 'Password', - placeholder: 'Your password' - }, - // Buttons - submit: { - default: 'Sign In', - loading: 'Signing in...' - }, - // Error messages - errors: { - default: 'An error has occurred', - invalidCredentials: 'Invalid credentials', - emailRequired: 'Please enter your email address', - passwordRequired: 'Please enter your password', - emailInvalid: 'Please enter a valid email address' - } - }, - // Links and help - help: { - forgotPassword: 'Forgot Password?', - needHelp: 'Need Help?', - contactSupport: 'Contact Support' - }, - // Status messages - status: { - authenticating: 'Authenticating...', - success: 'Successfully signed in', - redirecting: 'Redirecting to dashboard...' - }, - // Security notices - security: { - secureConnection: 'Secure Connection', - privacyNote: 'Your data is transmitted encrypted' - } -}; diff --git a/src/i18n/locales-old/en/pages/notfound.ts b/src/i18n/locales-old/en/pages/notfound.ts deleted file mode 100644 index 158b8f0..0000000 --- a/src/i18n/locales-old/en/pages/notfound.ts +++ /dev/null @@ -1,19 +0,0 @@ -// src/i18n/locales/en/pages/notfound.ts -export const notfound = { - // SEO - seo: { - title: '404 - Page Not Found', - description: 'The requested page does not exist.' - }, - // Main content - content: { - errorCode: '404', - title: 'Page Not Found', - description: 'The page you are looking for does not exist or has been moved.', - }, - // Action buttons - actions: { - goBack: 'Go Back', - homePage: 'Home Page' - } -}; diff --git a/src/i18n/locales-old/en/pages/portfolio.ts b/src/i18n/locales-old/en/pages/portfolio.ts deleted file mode 100644 index 31258eb..0000000 --- a/src/i18n/locales-old/en/pages/portfolio.ts +++ /dev/null @@ -1,117 +0,0 @@ -// src/i18n/locales/en/pages/portfolio.ts -export const portfolio = { - // SEO and meta information - seo: { - title: 'Portfolio - Damjan Savić', - description: 'Discover my projects in JTL integration, e-commerce, and digital transformation.' - }, - // Main page - main: { - title: 'Portfolio', - loading: 'Loading projects...', - error: 'Error loading projects', - noProjects: { - title: 'No Projects Found', - description: 'Currently, no projects are available. Please check back later.' - } - }, - // Project cards - projectCard: { - date: 'Date', - technologies: 'Technologies', - moreCount: 'more', // for '+X more' - readMore: 'Learn More' - }, - // Project details - project: { - loading: 'Loading project...', - backToPortfolio: 'Back to Portfolio', - notFound: { - title: 'Project not found', - description: 'The requested project could not be found.' - }, - navigation: { - back: 'Back to Portfolio', - projectDetails: 'PROJECT DETAILS' - }, - metadata: { - date: 'Date', - client: 'Client', - duration: 'Duration', - repository: 'Repository', - documentation: 'Documentation', - technologies: 'Technologies', - live: 'Live Version' - }, - sections: { - overview: 'Overview', - challenge: 'Challenge', - solution: 'Solution', - results: 'Results', - systemArchitecture: 'System Architecture', - implementation: 'Implementation', - technologies: 'Technologies Used' - } - }, - // Categories and filters - categories: { - all: 'All', - 'Data Science': 'Data Science', - 'AI Development': 'AI Development', - 'Integration': 'Integration', - 'Full-Stack Development': 'Full-Stack Development', - 'Data Processing': 'Data Processing', - 'Content Production': 'Content Production', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automation' - }, - // Specific projects - projects: { - 'ai-data-reader': { - title: 'AI-Based Product Data Management from PDF Files', - description: 'Development of an automated system for extracting and structuring product data from PDF documents' - }, - 'bi-vision': { - title: 'AI Videos for BI Software', - description: 'Development of AI-powered explainer videos for business intelligence dashboards' - }, - 'business-intelligence-ai': { - title: 'AI for Business Intelligence', - description: 'Integration of AI models into business intelligence systems for process optimization' - }, - 'claude-personal-assistant': { - title: 'AI-Based Personal Assistant with Claude AI', - description: 'Development of a personalized AI assistant for professional email communication' - }, - 'e-commerce-integration': { - title: 'Integration with TradeByte', - description: 'Integration of a Shopify store with JTL-WaWi for optimized inventory management' - }, - 'jtl-integration-project': { - title: 'JTL Integration Reference Project', - description: 'A complete warehouse system in Krefeld based on JTL' - }, - 'local-llm-training': { - title: 'Training of Local AI Models', - description: 'Development of a pipeline for training and fine-tuning local AI models' - }, - 'processautomation': { - title: 'Automation with Python', - description: 'Development of automation solutions for business processes' - }, - 'rfid-automation': { - title: 'RFID Automation', - description: 'Development of an automated system for creating and printing RFID labels' - }, - 'timetracking-software': { - title: 'Digital Time Tracking', - description: 'Development of a modern time tracking solution with Next.js, Flask, and MSSQL' - } - }, - // Status messages - status: { - loading: 'Loading...', - error: 'An error has occurred', - success: 'Successfully loaded' - } -}; diff --git a/src/i18n/locales-old/en/pages/privacy.ts b/src/i18n/locales-old/en/pages/privacy.ts deleted file mode 100644 index 14e66a2..0000000 --- a/src/i18n/locales-old/en/pages/privacy.ts +++ /dev/null @@ -1,96 +0,0 @@ -// src/i18n/locales/en/pages/privacy.ts -export const privacy = { - // SEO and Schema - seo: { - title: 'Privacy Policy', - description: 'Privacy Policy for Damjan Savić\'s portfolio website' - }, - schema: { - name: 'Privacy Policy', - description: 'Privacy Policy for Damjan Savić\'s portfolio website' - }, - // Main content - content: { - title: 'Privacy Policy', - lastUpdated: 'Last updated: March 10, 2024', - // Navigation - breadcrumbs: { - currentTitle: 'Privacy Policy' - }, - // Sections - sections: { - introduction: { - title: '1. Introduction', - content: 'This Privacy Policy explains how we collect, use, and protect your personal data when you use our website.' - }, - dataCollection: { - title: '2. Data Collection', - providedInfo: { - title: '2.1 Information You Provide', - intro: 'When using our contact form, we collect:', - items: [ - 'Name', - 'Email address', - 'Message content' - ] - }, - automaticInfo: { - title: '2.2 Automatically Collected Information', - intro: 'We automatically collect:', - items: [ - 'IP address', - 'Browser type', - 'Device information', - 'Pages visited', - 'Time spent on the website' - ] - } - }, - dataUsage: { - title: '3. Use of Your Data', - intro: 'We use your data for:', - items: [ - 'Responding to your inquiries', - 'Improving our website', - 'Analyzing usage patterns', - 'Fraud prevention' - ] - }, - cookies: { - title: '4. Cookies', - intro: 'We use cookies for:', - items: [ - 'Storing your preferences', - 'Analyzing website traffic', - 'Understanding user behavior' - ] - }, - security: { - title: '5. Data Security', - intro: 'We implement appropriate security measures to protect your personal data, including:', - items: [ - 'Data transmission encryption', - 'Regular security assessments', - 'Access controls', - 'Secure data storage' - ] - }, - rights: { - title: '6. Your Rights', - intro: 'You have the right to:', - items: [ - 'Access your personal data', - 'Rectify the data', - 'Delete the data', - 'Object to data processing', - 'Data portability' - ] - }, - contact: { - title: '7. Contact Information', - intro: 'For privacy-related inquiries, contact us at:', - email: 'Email: privacy@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/en/pages/terms.ts b/src/i18n/locales-old/en/pages/terms.ts deleted file mode 100644 index 9f82a7d..0000000 --- a/src/i18n/locales-old/en/pages/terms.ts +++ /dev/null @@ -1,59 +0,0 @@ -// src/i18n/locales/en/pages/terms.ts -export const terms = { - // SEO and Schema - seo: { - title: 'Terms and Conditions', - description: 'Terms and Conditions for Damjan Savić\'s portfolio website' - }, - schema: { - name: 'Terms and Conditions', - description: 'Terms and Conditions for Damjan Savić\'s portfolio website' - }, - // Main content - content: { - title: 'Terms and Conditions', - lastUpdated: 'Last updated: March 10, 2024', - // Navigation - breadcrumbs: { - currentTitle: 'Terms and Conditions' - }, - // Sections - sections: { - agreement: { - title: '1. Agreement to Terms', - content: 'By accessing our website, you agree to be bound by these Terms and Conditions and to comply with all applicable laws and regulations.' - }, - intellectualProperty: { - title: '2. Intellectual Property Rights', - content: 'All content on this website, including but not limited to text, graphics, logos, images, and software, is the property of Damjan Savić and is protected by intellectual property laws.' - }, - userResponsibilities: { - title: '3. User Responsibilities', - intro: 'When using our website, you agree to:', - items: [ - 'Provide accurate information', - 'Use the website legally and ethically', - 'Not attempt unauthorized access', - 'Not disrupt the website\'s operation' - ] - }, - liability: { - title: '4. Limitation of Liability', - content: 'We are not liable for any indirect, incidental, special, consequential, or punitive damages resulting from your use or inability to use the website.' - }, - changes: { - title: '5. Changes to Terms', - content: 'We reserve the right to modify these terms at any time. We will notify users of any material changes by posting the new Terms and Conditions on this page.' - }, - governingLaw: { - title: '6. Governing Law', - content: 'These terms are governed by and construed in accordance with the laws of the Federal Republic of Germany, without regard to its conflict of law provisions.' - }, - contact: { - title: '7. Contact Information', - intro: 'For questions about these Terms and Conditions, please contact us at:', - email: 'Email: legal@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/en/portfolio/index.ts b/src/i18n/locales-old/en/portfolio/index.ts deleted file mode 100644 index 93d936b..0000000 --- a/src/i18n/locales-old/en/portfolio/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -// src/i18n/locales/en/portfolio/index.ts -import { aiDataReader } from './projects/ai-data-reader'; -import kamenpro from './projects/kamenpro'; -import smartWarehouse from './projects/smart-warehouse'; -import powerPlatformGovernance from './projects/power-platform-governance'; -import websiteMitKi from './projects/website-mit-ki'; -import aiMusicProduction from './projects/ai-music-production'; -import automatedAdCreatives from './projects/automated-ad-creatives'; -import cursorIde from './projects/cursor-ide'; -export const portfolio = { - // Meta information for the portfolio page - seo: { - title: 'Portfolio - Damjan Savić', - description: 'Discover my projects in JTL integration, e-commerce, and digital transformation.' - }, - // Portfolio headings and filters - sections: { - title: 'Portfolio', - subtitle: 'Selected projects and references', - filterTitle: 'Categories', - sortTitle: 'Sort' - }, - // Filter options - filters: { - all: 'All', - categories: { - 'Data Science': 'Data Science', - 'AI Development': 'AI Development', - 'Integration': 'Integration', - 'Full-Stack Development': 'Full-Stack Development', - 'Data Processing': 'Data Processing', - 'Content Production': 'Content Production', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automation', - 'Web Development': 'Web Development', - 'AI & Automation': 'AI & Automation', - 'Enterprise Software': 'Enterprise Software' - } - }, - // Sort options - sort: { - date: 'Date', - title: 'Title', - category: 'Category' - }, - // UI texts - ui: { - loading: 'Loading projects...', - noProjects: 'No projects found', - viewProject: 'View project', - backToPortfolio: 'Back to portfolio', - technologies: 'Technologies', - client: 'Client', - duration: 'Duration', - visitWebsite: 'Visit website', - viewRepository: 'View repository', - viewDocumentation: 'Documentation' - }, - // All projects - projects: { - 'ai-data-reader': aiDataReader, - 'kamenpro': kamenpro, - 'smart-warehouse': smartWarehouse, - 'power-platform-governance': powerPlatformGovernance, - 'website-mit-ki': websiteMitKi, - 'ai-music-production': aiMusicProduction, - 'automated-ad-creatives': automatedAdCreatives, - 'cursor-ide': cursorIde, - } -}; diff --git a/src/i18n/locales-old/en/portfolio/projects/ai-data-reader.ts b/src/i18n/locales-old/en/portfolio/projects/ai-data-reader.ts deleted file mode 100644 index 5db7216..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/ai-data-reader.ts +++ /dev/null @@ -1,107 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/ai-data-reader.ts -export const aiDataReader = { - meta: { - slug: 'ai-data-reader', - title: "AI-Based Product Data Management from PDF Files", - description: "Development of an automated system for extracting and structuring product data from PDF documents", - excerpt: "Integration of Claude AI for intelligent processing of product information and seamless JTL ERP integration.", - date: "2025-02", - category: "Data Processing", - client: "Amazon Seller", - duration: "2 months", - url: "https://www.damjan-savic.com", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Python", "FastAPI", "Claude AI", "PyPDF", "Pydantic", "JTL-Wawi"], - tags: ["Data Extraction", "ERP", "Process Automation", "PDF Processing"] - }, - content: { - intro: "An AI-powered system for automated extraction of product data from PDF documents with direct integration into JTL inventory management systems, developed for maximum efficiency in product data management.", - - challenge: { - title: "The Challenge", - description: "Manual processing of product data from PDF documents was time-consuming and error-prone.", - points: [ - "Large volumes of PDF documents containing product information", - "Time-intensive manual data entry", - "Inconsistent data quality", - "High personnel requirements" - ] - }, - - solution: { - title: "Our Solution", - description: "Development of an AI-powered system for automated data extraction", - content: "By leveraging Claude AI and modern Python technologies, we created a fully automated solution that processes PDF documents and integrates the extracted data directly into the JTL inventory management system.", - points: [ - "Automated PDF processing", - "AI-powered data extraction", - "Intelligent data validation", - "Seamless JTL integration" - ] - }, - - technical: { - title: "Technical Implementation", - description: "The solution is based on a modular Python architecture with several core components:", - points: [ - "Robust PDF text extraction with PyPDF", - "AI-powered data extraction with Claude AI", - "Validation through Pydantic Models", - "JTL ERP integration via CSV export" - ], - code: `class ProductData(BaseModel): - artikel_nummer: str - name: str - hersteller: str - inhaltsstoffe: List[str] - allergene: List[str] - naehrwerte: NaehrwertData - nettogewicht: str - vegan: bool - vegetarisch: bool - -def _extract_with_claude(self, prompt: str) -> Dict[str, Any]: - '''Extracts structured data with Claude AI.''' - response = self.client.messages.create( - model='claude-3-sonnet-20240229', - messages=[{ - 'role': 'user', - 'content': prompt - }] - ) - return self._clean_json_string(response.content)` - }, - - implementation: { - title: "Implementation Process", - description: "The automated workflow was implemented in several phases:", - points: [ - "PDF batch processing from input directory", - "Intelligent text recognition and structuring", - "Multi-layer validation logic", - "Robust error handling", - "Integration with existing systems" - ] - }, - - results: { - title: "Results and Impact", - description: "The implementation led to significant improvements in business processes:", - points: [ - "90% time savings in product data management", - "99% accuracy in data extraction", - "Elimination of manual data entry", - "Standardized product data quality", - "Significantly reduced error rate" - ] - }, - - conclusion: "The developed system has revolutionized product data management. By combining AI technology with automated data processing, we not only drastically increased efficiency but also significantly improved data quality. The project demonstrates impressively how modern AI solutions can solve practical business problems." - } -}; - -// Re-export for compatibility with the project import system -export default aiDataReader; \ No newline at end of file diff --git a/src/i18n/locales-old/en/portfolio/projects/ai-music-production.ts b/src/i18n/locales-old/en/portfolio/projects/ai-music-production.ts deleted file mode 100644 index 7e4defa..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/ai-music-production.ts +++ /dev/null @@ -1,114 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/ai-music-production.ts -export const aiMusicProduction = { - meta: { - slug: 'ai-music-production', - title: "Suno AI - AI-Powered Music Production | From Lyrics to Finished Track", - description: "Complete workflow for music production with Suno AI: writing lyrics, generating instrumentals, mixing styles, and publishing on Soundcloud.", - excerpt: "AI-powered music production with Suno AI. From handwritten lyrics to finished track in 2-3 hours - including cover design and Soundcloud upload.", - date: "2025-01", - category: "AI & Creative", - client: "Personal Project", - duration: "Ongoing", - url: "https://soundcloud.com/desetka", - videoUrl: "https://www.tella.tv/video/musikproduktion-per-ki-mit-damjan-savic-desetka-1-2mjh", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Suno AI", "Soundcloud", "Pinterest", "Photoshop", "AI Music Production"], - tags: ["Suno AI", "Music Production", "AI Music", "Desetka", "Soundcloud", "Creative AI"] - }, - content: { - intro: "AI-powered music production: A complete workflow for creating professional songs with Suno AI. From idea to lyrics to finished track on Soundcloud - all in a structured process.", - - challenge: { - title: "The Challenge", - description: "Traditional music production requires extensive resources and skills.", - points: [ - "Classic music production needs expensive software and hardware", - "Instrumentalists and producers must be coordinated", - "The production process often takes weeks or months", - "High barriers to entry for artists without musical training", - "Creative visions are difficult to realize quickly" - ] - }, - - solution: { - title: "The Solution", - description: "A structured AI workflow for efficient music production", - content: "With Suno AI, the entire music production process can be reduced to just a few hours. The workflow combines human creativity (lyrics) with AI-generated music for authentic, professional results.", - points: [ - "Lyrics are written manually - full creative control", - "Suno AI generates instrumentals based on style prompts", - "Iterative remixing for the perfect sound", - "Cover design with Pinterest inspiration and Photoshop", - "Direct upload to Soundcloud under the alias 'Desetka'" - ] - }, - - technical: { - title: "The Workflow", - description: "Step-by-step process for AI music production:", - points: [ - "Write lyrics with clear rhyme scheme (e.g., endings on e, a, i)", - "Develop melody mentally while writing", - "Generate instrumental in Suno AI with style prompts", - "Configure Weirdness (35%) and Audio Influence (75%)", - "Mix different styles (e.g., Synthwave → Luxury Rap)", - "Like favorites for AI learning effect", - "Find cover on Pinterest and edit in Photoshop (1950x1950px)", - "WAV export and upload to Soundcloud" - ], - code: `// Suno AI Style Configuration -const sunoConfig = { - name: "205 Matrix Instrumental", - settings: { - weirdness: "35%", - styleInfluence: "75%", - audioInfluence: "25-35%" // Lower for remastered - }, - styles: [ - "Synthwave", - "Melodic RIP", - "Luxury Rap" - ], - tips: [ - "Liked songs influence future generations", - "For artifacts: reduce Audio Influence", - "Combine styles for unique sound" - ] -};` - }, - - implementation: { - title: "Creative Process", - description: "The art of songwriting with AI support:", - points: [ - "Write lyrics in Serbian (melodic sound)", - "Clear rhyme scheme for hook and verses", - "Mentally develop melody before production", - "No instrumentals needed for initial ideas", - "Translation to English possible later", - "2-3 hours for a complete song", - "On good days: 3 songs per hour possible" - ] - }, - - results: { - title: "Results", - description: "Benefits of AI-powered music production:", - points: [ - "Production time reduced from weeks to hours", - "Full creative control over lyrics and direction", - "Professional instrumentals without a studio", - "Iterative work until the perfect sound", - "Direct path from concept to publication", - "Artist alias 'Desetka' established on Soundcloud" - ] - }, - - conclusion: "AI music production with Suno AI revolutionizes the creative process. The combination of handwritten lyrics and AI-generated instrumentals makes it possible to realize musical visions quickly and professionally. The human remains creatively at the center - AI is the tool for realization." - } -}; - -export default aiMusicProduction; diff --git a/src/i18n/locales-old/en/portfolio/projects/automated-ad-creatives.ts b/src/i18n/locales-old/en/portfolio/projects/automated-ad-creatives.ts deleted file mode 100644 index 5594e7f..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/automated-ad-creatives.ts +++ /dev/null @@ -1,95 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/automated-ad-creatives.ts -export const automatedAdCreatives = { - meta: { - slug: 'automated-ad-creatives', - title: 'Automated Ad Creatives: AI-Powered Ad Creation', - description: 'Development of a workflow for automated creation of Facebook Ad Creatives with Claude Opus 4.5 - without design software, entirely in chat', - excerpt: 'From design template to finished ad: How AI revolutionizes ad creative creation.', - date: '2025-01', - category: 'AI & Automation', - client: 'Personal Project', - duration: '1 Day', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Opus 4.5', 'HTML/CSS', 'PNG Export', 'Prompt Engineering'], - tags: ['AI', 'Automation', 'Facebook Ads', 'Marketing', 'No-Code'], - videoUrl: 'https://www.tella.tv/video/automatisierte-ad-creatives-1kyw' - }, - content: { - intro: 'Programs like Illustrator, InDesign, Figma, or Canva can be complicated. This project shows how Facebook Ad Creatives can be created entirely in an AI chat - without design software, without programming knowledge.', - - challenge: { - title: 'The Challenge', - description: 'Creating ad assets for Facebook campaigns traditionally requires:', - points: [ - 'Knowledge of design software (Illustrator, Figma, Canva)', - 'Time for learning and implementation', - 'Understanding of format requirements and best practices', - 'Iterations between design and marketing', - 'Budget for designers or design tools' - ] - }, - - solution: { - title: 'The Solution', - description: 'An AI-powered workflow that handles the entire process in a chat window:', - content: 'The complete workflow takes place in chat with Claude Opus 4.5. Alternatively, Gemini or ChatGPT also work.', - points: [ - 'Design template as visual reference for the AI', - 'HTML generation through natural language prompts', - 'Automatic conversion to PNG image files', - 'Integration of additional images via drag & drop', - 'Iterations through simple chat instructions' - ] - }, - - technical: { - title: 'Technical Implementation', - description: 'The workflow in detail:', - points: [ - 'Step 1: Design template from Envato Elements as reference', - 'Step 2: Send prompt with image to Claude - HTML is generated', - 'Step 3: Export HTML to PNG', - 'Step 4: Integrate additional images via drag & drop' - ] - }, - - tools: { - title: 'Tools Used', - items: [ - { name: 'Claude Opus 4.5', purpose: 'AI for HTML generation and image export' }, - { name: 'Envato Elements', purpose: 'Design templates as reference' }, - { name: 'Unsplash', purpose: 'Free images for creatives' } - ] - }, - - results: { - title: 'Benefits of This Approach', - description: 'The AI-powered workflow offers several advantages:', - points: [ - 'No design skills needed: AI handles the technical implementation', - 'Fast iterations: Changes in seconds through chat instructions', - 'Scalable: Any number of variants for A/B testing', - 'Cost-effective: No expensive design tools required', - 'Flexible: Also works with Gemini or ChatGPT' - ] - }, - - useCases: { - title: 'Use Cases', - points: [ - 'Performance Marketing: Quick creative tests without waiting', - 'E-Commerce: Product advertising at scale', - 'Startups: Professional ads without a design team', - 'Agencies: Efficient client work for ad creation' - ] - }, - - conclusion: 'The workflow demonstrates how AI simplifies the creation of ad creatives. The result may not yet be at the level of a professional graphic designer - but for quick tests, initial drafts, or teams without design resources, this approach is a real alternative. The technology is evolving rapidly.' - } -}; - -export default automatedAdCreatives; diff --git a/src/i18n/locales-old/en/portfolio/projects/cursor-ide.ts b/src/i18n/locales-old/en/portfolio/projects/cursor-ide.ts deleted file mode 100644 index d8177fd..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/cursor-ide.ts +++ /dev/null @@ -1,89 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/cursor-ide.ts -export const cursorIde = { - meta: { - slug: 'cursor-ide', - title: 'Cursor IDE: AI-Powered Software Development', - description: 'Introduction to Cursor - the revolutionary AI-powered development environment that enables software projects through natural language', - excerpt: 'Discover how Cursor IDE acts as your personal AI programmer and creates complete projects from natural language.', - date: '2025-01', - category: 'AI & Development', - client: 'Tutorial', - duration: 'Introduction', - url: 'https://cursor.com', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Cursor IDE', 'AI', 'Next.js', 'React', 'TypeScript', 'Node.js'], - tags: ['AI', 'IDE', 'Development', 'Tutorial', 'Code Generation', 'Automation'], - videoUrl: 'https://www.tella.tv/video/cursor-ide-1-1kjg' - }, - content: { - intro: 'Cursor is an AI-powered development environment that works like a personal programmer. It understands natural language, generates code independently, finds and fixes errors - and builds complete software projects on command.', - - challenge: { - title: 'Before: The Challenges', - description: 'Traditional software development came with high barriers:', - points: [ - 'Programming languages had to be learned', - 'Debugging often took hours', - 'Every line of code had to be typed manually', - 'Google and Stackoverflow were constant companions', - 'High entry barrier for non-developers' - ] - }, - - solution: { - title: 'Now: The Solution with Cursor', - description: 'Cursor revolutionizes software development through AI integration:', - content: 'Imagine having a personal programmer sitting next to you who can understand all your software ideas in natural spoken language. That is exactly what Cursor is.', - points: [ - 'Simply describe what you want', - 'AI finds and fixes errors automatically', - 'AI generates the complete code', - 'AI explains the entire project in the editor', - 'Integrated browser for direct preview' - ] - }, - - technical: { - title: 'The Cursor Interface', - description: 'After downloading from cursor.com, the interface consists of:', - points: [ - 'Menu bar (top): Navigation through the IDE', - 'File Explorer (left): Project structure with directories and files', - 'Editor (center): View and edit files', - 'Terminal (bottom): Accessible via View > Terminal', - 'AI Chat (right): Control development via AI' - ] - }, - - implementation: { - title: 'Getting Started', - description: 'How to start with Cursor:', - points: [ - 'Download Cursor from cursor.com', - 'Install for your operating system', - 'Create a project folder and open it in Cursor', - 'Describe what you want to build in the AI chat', - 'Let the AI work and adjust as needed' - ] - }, - - results: { - title: 'Practical Example', - description: 'A simple prompt like "I want to build a website with Next, React and TypeScript with a modern Hello World display" is enough:', - points: [ - 'AI checks the project state', - 'The entire project is built automatically', - 'After a few seconds, the website is ready', - 'Install dependencies with npm install', - 'Start the development server with npm run dev' - ] - }, - - conclusion: 'Cursor revolutionizes software development by dramatically lowering the barrier between idea and implementation. Instead of learning programming languages, you simply describe in natural language what you want - and the AI does the rest.' - } -}; - -export default cursorIde; diff --git a/src/i18n/locales-old/en/portfolio/projects/kamenpro.ts b/src/i18n/locales-old/en/portfolio/projects/kamenpro.ts deleted file mode 100644 index 09957ed..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/kamenpro.ts +++ /dev/null @@ -1,135 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/kamenpro.ts -export const kamenpro = { - meta: { - slug: 'kamenpro', - title: "KamenPro: Digital Transformation for Decorative Stone Cladding", - description: "Development of a modern multi-location PWA for a decorative stone cladding manufacturer from Bijeljina using React 18.3 and Supabase", - excerpt: "From stone to pixel: How a traditional craft business generates 300% more inquiries through modern web technology.", - date: "2025-01", - category: "Web Development", - client: "KamenPro - Željko", - duration: "3 months", - url: "https://kamenpro.net", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["React 18.3", "TypeScript", "Vite", "Supabase", "Framer Motion", "TailwindCSS", "PWA", "Schema.org"], - tags: ["Multi-Location SEO", "E-Commerce", "PWA", "Local Business", "Performance"] - }, - content: { - intro: "KamenPro, an established manufacturer of decorative stone cladding from Bijeljina, faced the challenge of bringing their traditional craft into the digital world. This case study shows how modern web technology helped a local craft business achieve regional success.", - - challenge: { - title: "The Challenge", - description: "As a manufacturer of high-quality stone cladding made from white cement, KamenPro lacked the digital presence to compete with online competition.", - points: [ - "No digital presence despite high online demand", - "Customers searched online for 'dekorativni kamen' without finding KamenPro", - "Missing product presentation for 3 different stone textures", - "No local SEO presence in Bijeljina, Brčko and Tuzla", - "Loss of potential customers to digitally present competition" - ] - }, - - solution: { - title: "The Solution Approach", - description: "A modern PWA with multi-location SEO strategy for maximum local visibility", - content: "We developed a high-performance Progressive Web App that makes KamenPro's craftsmanship digitally tangible. The focus was on local discoverability in three cities and optimal product presentation for builders and architects.", - points: [ - "Multi-location SEO for Bijeljina, Brčko and Tuzla", - "Product catalog with HD images of stone textures", - "PWA for offline availability on construction sites", - "Supabase backend for product management and inquiries", - "Schema.org LocalBusiness for optimal Google presence" - ] - }, - - technical: { - title: "Technical Implementation", - description: "Multi-location SEO architecture with location-specific landing pages:", - points: [ - "Location-based routing for 3 cities", - "Product catalog system with Supabase", - "Image optimization for heavy stone texture photos", - "PWA for offline product catalog", - "Schema.org LocalBusiness for each city" - ], - code: `// Multi-location SEO with Schema.org -const LocationPage: React.FC<{city: string}> = ({ city }) => { - const structuredData = { - "@context": "https://schema.org", - "@type": "LocalBusiness", - "name": \`KamenPro \${city}\`, - "description": \`Decorative stone and facade cladding in \${city}\`, - "telephone": "+387 65 678 634", - "address": { - "@type": "PostalAddress", - "addressLocality": city, - "addressCountry": "BA" - }, - "areaServed": { - "@type": "GeoCircle", - "geoRadius": "50000" - } - }; - - return ( - <> - - Decorative Stone {city} | KamenPro - - - - - - - ); -}; - -// Product management with Supabase -interface StoneProduct { - id: string; - name: string; - type: 'decorative_stone' | 'rustic_brick'; - dimensions: { length: 44, width: 8.5, thickness: 15 }; - price_per_m2: number; // 33-40 BAM - weight_per_m2: 32; // kg - textures: string[]; // 3 different - available_colors: string[]; -}` - }, - - implementation: { - title: "Local SEO Success", - description: "Through targeted multi-location optimization, we achieved top rankings:", - points: [ - "Rank #1 for 'dekorativni kamen bijeljina'", - "Rank #2 for 'fasadne obloge brčko'", - "Rank #1 for 'rustik cigla tuzla'", - "Google My Business integration for all locations", - "Local backlinks from construction companies" - ] - }, - - results: { - title: "Measurable Business Results", - description: "The digital transformation delivered impressive results:", - points: [ - "300% more inquiries in the first 3 months", - "From 0 to rank 1-3 for local searches", - "45 inquiries/month instead of ~12 previously", - "25-30 projects/quarter instead of 8-10", - "ROI of 275% in 6 months", - "Expansion into new markets through online presence" - ] - }, - - conclusion: "KamenPro's digital transformation impressively shows how a traditional craft business can open up new markets through modern web technology. The combination of multi-location SEO, optimized product presentation and technical excellence led to a tripling of customer inquiries. Particularly remarkable: A local stone cladding manufacturer from Bijeljina now reaches customers throughout the region - proof that thoughtful digitalization brings measurable success even in traditional crafts." - } -}; - -// Re-export for compatibility with the project import system -export default kamenpro; \ No newline at end of file diff --git a/src/i18n/locales-old/en/portfolio/projects/power-platform-governance.ts b/src/i18n/locales-old/en/portfolio/projects/power-platform-governance.ts deleted file mode 100644 index a9874f2..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/power-platform-governance.ts +++ /dev/null @@ -1,244 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/power-platform-governance.ts -export const powerPlatformGovernance = { - meta: { - slug: 'power-platform-governance', - title: "Power Platform Governance & Automation Suite", - description: "Enterprise governance platform for Microsoft Power Platform and SharePoint Online", - excerpt: "Central management, monitoring, and automation of the entire M365 environment - from tenant provisioning to compliance monitoring.", - date: "2025-01", - category: "Enterprise Software", - client: "Enterprise CoE Teams", - duration: "6 months", - url: "https://governance-demo.azurewebsites.net", - repository: "", - documentation: "/docs/power-platform-governance", - published: true, - featured: true, - technologies: ["React", "TypeScript", "Node.js", "Microsoft Graph", "PowerShell", "Azure Functions", "GraphQL", "Fluent UI"], - tags: ["Microsoft 365", "Power Platform", "SharePoint", "Governance", "Automation", "Enterprise"] - }, - content: { - intro: "A comprehensive enterprise governance platform that enables IT administrators and Power Platform CoE teams to centrally manage and automate their entire M365 environment.", - - challenge: { - title: "The Challenge", - description: "Uncontrolled growth of Power Apps, Flows, and SharePoint sites led to critical issues.", - points: [ - "Shadow IT through ungoverned citizen development", - "Compliance risks and data protection violations", - "Exploding license costs from unused resources", - "Lack of visibility into the Power Platform landscape", - "Manual, error-prone provisioning processes", - "Inconsistent governance policies across teams" - ] - }, - - solution: { - title: "The Solution", - description: "A central governance platform with real-time monitoring and automation", - content: "The platform combines modern web technologies with Microsoft 365 APIs to enable seamless integration and complete control over the entire Power Platform environment.", - points: [ - "Automated Provisioning Hub for sites, teams, and environments", - "Real-Time Monitoring Dashboard with live activity streams", - "Power Platform Governance Center with DLP policy enforcement", - "Compliance & Security Suite with permission analyzer", - "PowerShell Automation Framework for custom operations", - "Intelligent Resource Optimization with ML-based predictions" - ] - }, - - technical: { - title: "Technical Implementation", - description: "The solution is based on a modern microservices architecture with event-driven design:", - points: [ - "React 18.3 with TypeScript for type-safe frontend development", - "Fluent UI v9 for native Microsoft look & feel", - "GraphQL API with Apollo Server for efficient data queries", - "Azure Functions for serverless automation", - "PowerShell 7.4 Core for M365 operations", - "Azure Service Bus for asynchronous job processing", - "Cosmos DB for global data replication" - ] - }, - - features: { - title: "Key Features", - items: [ - { - title: "Automated Provisioning Hub", - description: "Template-based SharePoint site creation with bulk provisioning and post-provisioning workflows", - icon: "automation" - }, - { - title: "Real-Time Monitoring", - description: "Live activity streams with real-time updates via WebSockets and GraphQL subscriptions", - icon: "monitoring" - }, - { - title: "Permission Analyzer", - description: "Cross-tenant permission reports with overprivileged users detection and external sharing audit", - icon: "security" - }, - { - title: "PowerShell Framework", - description: "120+ custom cmdlets with centralized script library and scheduled automation", - icon: "powershell" - }, - { - title: "Compliance Suite", - description: "DLP policy builder with sensitive data discovery and automated remediation", - icon: "compliance" - }, - { - title: "Resource Optimizer", - description: "ML-based usage prediction with automated cleanup and cost allocation", - icon: "optimization" - } - ] - }, - - implementation: { - title: "Implementation Phases", - phases: [ - { - title: "Phase 1: Foundation", - duration: "6 weeks", - description: "Architecture setup and core services", - tasks: [ - "Azure infrastructure setup with Terraform", - "GraphQL API and authentication service", - "Microsoft Graph integration", - "PowerShell execution framework" - ] - }, - { - title: "Phase 2: Core Features", - duration: "10 weeks", - description: "Development of main functionalities", - tasks: [ - "Provisioning engine with template system", - "Real-time monitoring dashboard", - "Permission analyzer implementation", - "DLP policy management" - ] - }, - { - title: "Phase 3: Intelligence", - duration: "8 weeks", - description: "ML features and automation", - tasks: [ - "Resource usage prediction model", - "Automated cleanup workflows", - "Cost optimization engine", - "Anomaly detection system" - ] - } - ] - }, - - challenges: { - title: "Challenges & Solutions", - items: [ - { - challenge: "API rate limiting", - solution: "Intelligent request batching with exponential backoff and Redis-based caching" - }, - { - challenge: "Multi-tenant isolation", - solution: "Separate databases per tenant with row-level security and encryption at rest" - }, - { - challenge: "Real-time updates with large data volumes", - solution: "WebSocket-based updates with GraphQL subscriptions and delta queries" - }, - { - challenge: "PowerShell execution security", - solution: "Sandboxed execution with Azure Container Instances and Just Enough Administration" - } - ] - }, - - results: { - title: "Results", - description: "The platform completely transformed Power Platform governance:", - metrics: [ - { label: "Provisioning time", value: "95% faster" }, - { label: "Compliance rate", value: "94%" }, - { label: "Cost reduction", value: "40%" }, - { label: "Admin productivity", value: "3x" }, - { label: "Incident response", value: "80% faster" }, - { label: "Shadow IT reduction", value: "90%" } - ], - impact: "The solution enabled organizations to find the balance between innovation and control. Citizen developers could work safely while IT maintained full governance." - }, - - performance: { - title: "Performance & Scaling", - metrics: { - technical: { - title: "Technical Metrics", - items: [ - "35,000+ lines of code", - "45+ React components", - "120+ PowerShell cmdlets", - "80+ GraphQL endpoints", - "92% test coverage" - ] - }, - scale: { - title: "Scale", - items: [ - "25+ enterprise tenants", - "50,000+ managed resources", - "5,000+ daily automations", - "100+ concurrent users", - "99.9% uptime SLA" - ] - }, - architecture: { - title: "Architecture", - items: [ - "Multi-region deployment", - "Auto-scaling with AKS", - "Global data replication", - "Zero-downtime deployments", - "Disaster recovery <1h RTO" - ] - } - } - }, - - testimonial: { - text: "This platform revolutionized our Power Platform governance. What used to take weeks now happens in minutes - fully automated and compliant.", - author: "Michael Schmidt", - position: "Head of IT Governance", - company: "Fortune 500 Company" - }, - - learnings: { - title: "Lessons Learned", - items: [ - "Event-driven architecture is essential for scalability with enterprise workloads", - "PowerShell Core enables cross-platform automation without Windows dependency", - "GraphQL reduced API calls by 60% through efficient data fetching", - "Policy as Code significantly simplified governance management", - "Incremental sync with delta queries is critical for performance" - ] - }, - - future: { - title: "Future Perspectives", - description: "The platform is continuously being expanded and improved.", - plans: [ - "AI-powered insights with anomaly detection", - "Microsoft Copilot integration for natural language governance", - "Fabric Analytics for advanced BI integration", - "Container Apps for serverless PowerShell execution", - "Zero Trust security model implementation", - "Cross-cloud support for AWS and Google Cloud" - ] - } - } -}; - -export default powerPlatformGovernance; \ No newline at end of file diff --git a/src/i18n/locales-old/en/portfolio/projects/smart-warehouse.ts b/src/i18n/locales-old/en/portfolio/projects/smart-warehouse.ts deleted file mode 100644 index 84aaf88..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/smart-warehouse.ts +++ /dev/null @@ -1,222 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/smart-warehouse.ts -export const smartWarehouse = { - meta: { - slug: 'smart-warehouse', - title: "Intelligent Warehouse Management with Computer Vision", - description: "AI-powered system for real-time inventory management and warehouse process optimization", - excerpt: "Development of an autonomous warehouse management system with Computer Vision, IoT sensors, and Machine Learning for precise inventory tracking.", - date: "2025-01", - category: "AI & Automation", - client: "LogiTech Solutions GmbH", - duration: "4 months", - url: "https://warehouse-demo.example.com", - repository: "", - documentation: "/case-studies/smart-warehouse", - published: true, - featured: true, - technologies: ["YOLOv8", "Python", "FastAPI", "React", "PostgreSQL", "Docker", "Kubernetes", "IoT", "MQTT"], - tags: ["Computer Vision", "Machine Learning", "IoT", "Edge Computing", "Automation"] - }, - content: { - intro: "A mid-sized logistics provider transformed their manual warehouse management through a fully automated system combining Computer Vision, IoT sensors, and Machine Learning.", - - challenge: { - title: "The Challenge", - description: "Manual inventory management led to significant operational issues.", - points: [ - "Discrepancies between actual and recorded stock of up to 15%", - "Time-intensive manual inventories (3-4 days per quarter)", - "Lack of real-time transparency on inventory levels", - "Inefficient storage space utilization due to lack of optimization", - "High personnel costs from manual processes" - ] - }, - - solution: { - title: "The Solution", - description: "Development of a fully automated warehouse management system", - content: "The system combines Computer Vision, IoT sensors, and Machine Learning for continuous, precise inventory tracking without human intervention.", - points: [ - "AI-powered object detection using high-resolution cameras", - "IoT weight sensors for validation", - "Predictive Analytics for inventory optimization", - "Real-time dashboard with mobile access", - "Automatic reorder triggers" - ] - }, - - technical: { - title: "Technical Implementation", - description: "The solution is based on a modular microservices architecture with edge computing for real-time processing:", - points: [ - "YOLOv8 for precise object detection", - "Edge Computing for <50ms image processing", - "Apache Kafka for stream processing of 2TB data/day", - "MQTT-based IoT integration with 200+ sensors", - "PostgreSQL for data persistence", - "Kubernetes for scalability" - ] - }, - - features: { - title: "Core Features", - items: [ - { - title: "Real-time Object Detection", - description: "98.7% accuracy in inventory tracking through AI-powered image recognition", - icon: "camera" - }, - { - title: "IoT Sensor Integration", - description: "200+ sensors validate CV results through weight measurements", - icon: "sensor" - }, - { - title: "Predictive Analytics", - description: "Forecasting inventory movements and automatic reordering", - icon: "chart" - }, - { - title: "Mobile Dashboard", - description: "Real-time access to all warehouse data from anywhere", - icon: "mobile" - } - ] - }, - - implementation: { - title: "Implementation Phases", - phases: [ - { - title: "Phase 1: Proof of Concept", - duration: "4 weeks", - description: "Prototype development and model training", - tasks: [ - "Development of a prototype for one warehouse area", - "Training the ML model with 10,000+ annotated images", - "Integration of 5 test cameras and 20 IoT sensors", - "Validation of detection accuracy" - ] - }, - { - title: "Phase 2: Scaling", - duration: "8 weeks", - description: "Complete rollout to 5,000m² warehouse space", - tasks: [ - "Installation of 45 cameras and 200+ sensors", - "Development of real-time dashboard", - "Integration with existing ERP system", - "Performance optimization" - ] - }, - { - title: "Phase 3: Optimization", - duration: "4 weeks", - description: "Fine-tuning and advanced features", - tasks: [ - "Fine-tuning of ML models", - "Implementation of Predictive Analytics", - "Mobile app development", - "Employee training" - ] - } - ] - }, - - challenges: { - title: "Challenges & Solutions", - items: [ - { - challenge: "Varying lighting conditions", - solution: "HDR cameras with adaptive image preprocessing and augmented training data" - }, - { - challenge: "Real-time processing of large data volumes", - solution: "Edge Computing for preprocessing and Apache Kafka for stream processing" - }, - { - challenge: "Legacy system integration", - solution: "Development of an adapter layer with bidirectional synchronization" - } - ] - }, - - results: { - title: "Results", - description: "The system completely transformed warehouse management:", - metrics: [ - { label: "Detection accuracy", value: "98.7%" }, - { label: "Inventory time reduction", value: "85%" }, - { label: "Fewer stock discrepancies", value: "60%" }, - { label: "Storage space utilization", value: "+35%" }, - { label: "ROI", value: "14 months" }, - { label: "System uptime", value: "99.95%" } - ], - impact: "Real-time transparency enabled proactive decisions and prevented supply bottlenecks. Employees could focus on value-adding activities while AI handled inventory management." - }, - - performance: { - title: "Performance Metrics", - metrics: { - processing: { - title: "Processing", - items: [ - "Image processing: <50ms per frame", - "API Response Time: p95 < 100ms", - "Data processing: 500 events/second", - "System Uptime: 99.95%" - ] - }, - scale: { - title: "Scaling", - items: [ - "45 cameras active (up to 200 possible)", - "200+ IoT sensors", - "50+ concurrent users", - "50TB data storage" - ] - }, - ml: { - title: "ML Performance", - items: [ - "mAP@50: 0.92", - "Inference Time: 23ms", - "False Positive Rate: <2%", - "Model Size: 138MB" - ] - } - } - }, - - testimonial: { - text: "The implementation revolutionized our warehouse processes. What used to take days now happens in real-time. The accuracy and efficiency are impressive.", - author: "Thomas Weber", - position: "Head of Logistics", - company: "LogiTech Solutions GmbH" - }, - - learnings: { - title: "Lessons Learned", - items: [ - "Edge Computing is essential: Preprocessing directly at the camera reduced network load by 70%", - "Data quality over quantity: 1,000 high-quality annotations were more valuable than 10,000 automatically generated ones", - "Iterative development: Early piloting in one area enabled quick adjustments", - "Change management: Early involvement of employees was crucial for acceptance" - ] - }, - - future: { - title: "Future Perspectives", - description: "The system was designed as a white-label solution and can be deployed in other warehouses with minimal adjustments.", - plans: [ - "Integration of robotics for automated picking", - "Extension to external warehouses and mobile units", - "AI-based prediction of maintenance needs", - "Blockchain integration for supply chain transparency", - "AR glasses for warehouse workers with visual hints" - ] - } - } -}; - -export default smartWarehouse; \ No newline at end of file diff --git a/src/i18n/locales-old/en/portfolio/projects/website-mit-ki.ts b/src/i18n/locales-old/en/portfolio/projects/website-mit-ki.ts deleted file mode 100644 index 80d2409..0000000 --- a/src/i18n/locales-old/en/portfolio/projects/website-mit-ki.ts +++ /dev/null @@ -1,80 +0,0 @@ -// src/i18n/locales/en/portfolio/projects/website-mit-ki.ts -export const websiteMitKi = { - meta: { - slug: 'website-mit-ki', - title: 'Build Your Own Website with AI: From Zero to Finished Site', - description: 'Step-by-step guide to building a professional website with Claude Code - GDPR compliant, multilingual, with portfolio and blog', - excerpt: 'How to create a complete website in under an hour - without writing a single line of code yourself.', - date: '2025-01', - category: 'AI & Automation', - client: 'Personal Project', - duration: '30 Minutes', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Code', 'React', 'TypeScript', 'Vercel', 'GitHub', 'Vite'], - tags: ['AI', 'Website', 'No-Code', 'Tutorial', 'Claude Code', 'Vercel'], - videoUrl: 'https://www.tella.tv/video/baue-deine-website-noch-heute-mit-ki-8f7v' - }, - content: { - intro: 'A professional website without programming knowledge? With AI, this is possible today. This tutorial shows the complete process - from an empty project folder to a finished, hosted website.', - - challenge: { - title: 'The Challenge', - description: 'The traditional path to your own website is often complicated and expensive:', - points: [ - 'Website builders like Wix, WordPress or Webflow incur monthly costs', - 'Custom development requires programming skills', - 'Designers and developers are expensive', - 'GDPR compliance and SEO optimization are complex', - 'Multilingual support and responsive design require additional effort' - ] - }, - - solution: { - title: 'The Solution', - description: 'With AI, a complete website can be built in under an hour:', - content: 'The complete workflow uses Claude Code for autonomous development, GitHub for versioning, and Vercel for free hosting.', - points: [ - 'GDPR-compliant implementation with cookie banner', - 'Multilingual support (German, English, more possible)', - 'Portfolio page with interactive projects', - 'Blog functionality for blog posts', - 'SEO optimization for better Google rankings', - 'Contact form for potential clients' - ] - }, - - technical: { - title: 'The Workflow', - description: 'This is how the process works step by step:', - points: [ - 'Step 1: Create GitHub account and repository', - 'Step 2: Set up Vercel account for free hosting', - 'Step 3: Prepare local project folder with relevant documents', - 'Step 4: Open Claude Code and enter prompt with desired features', - 'Step 5: AI works autonomously and creates the complete website', - 'Step 6: Push project to GitHub and import in Vercel' - ] - }, - - results: { - title: 'Benefits of This Solution', - description: 'AI-powered website development offers several advantages:', - points: [ - 'No programming skills required', - 'Minimal costs: Only AI subscription and optionally domain', - 'Better visibility through SEO optimization', - 'Full control: Code is on GitHub, hosting is free', - 'Quick changes possible via chat instructions', - 'Mobile-optimized, responsive design included' - ] - }, - - conclusion: 'A complete, professional website can be built today in under an hour - without writing a single line of code yourself. The combination of AI development, free hosting, and versioning makes this solution interesting not only for developers, but for anyone who needs a professional web presence.' - } -}; - -export default websiteMitKi; diff --git a/src/i18n/locales-old/en/seo-content.ts b/src/i18n/locales-old/en/seo-content.ts deleted file mode 100644 index 58e4b23..0000000 --- a/src/i18n/locales-old/en/seo-content.ts +++ /dev/null @@ -1,100 +0,0 @@ -export const seoContent = { - hero: { - title: "Damjan Savić | Fullstack, IoT & AI Developer", - subtitle: "Scalable Software Solutions with IoT and AI Integration", - description: "As a fullstack developer from Cologne, Damjan Savić specializes in building scalable software solutions with IoT and AI integration.", - cta: { - primary: "View Projects", - secondary: "Work with Damjan Savić" - } - }, - services: { - title: "IT Services by Damjan Savić - Senior Developer & Consultant", - subtitle: "Custom Enterprise Solutions & Digital Transformation by Damjan Savić", - items: { - backend: { - title: "Enterprise Backend Development by Damjan Savić | Python & Cloud Architecture", - description: "Damjan Savić develops scalable backend systems with Python, FastAPI, and Django. As an experienced Cloud Architect, Damjan Savić implements microservices, RESTful APIs, and event-driven architectures for enterprise applications.", - keywords: ["Backend Developer Cologne", "Python Developer Germany", "API Development FastAPI", "Microservices Developer", "Django Developer Europe", "Cloud Architecture"] - }, - frontend: { - title: "Modern Frontend Development by Damjan Savić | React, TypeScript & Next.js", - description: "Damjan Savić creates modern, performant frontend solutions with React, TypeScript, and Next.js. Specializing in enterprise UI/UX, Progressive Web Apps, and accessible web applications, Damjan Savić delivers future-proof interfaces.", - keywords: ["React Developer Germany", "Frontend Developer Cologne", "Next.js Developer Europe", "TypeScript React Developer", "Progressive Web App Development", "JavaScript Developer"] - }, - ai: { - title: "AI & Machine Learning Integration by Damjan Savić | OLLAMA & LLM Expert", - description: "Damjan Savić integrates artificial intelligence into your business processes. As an AI specialist, Damjan Savić implements OLLAMA, Large Language Models, and Machine Learning solutions for automation, data analysis, and intelligent systems.", - keywords: ["OLLAMA AI Integration", "Machine Learning Germany", "LLM Integration", "AI Developer Cologne", "NLP Development", "Python AI Development"] - }, - erp: { - title: "ERP & System Integration by Damjan Savić | SAP, Dynamics & Custom Solutions", - description: "Damjan Savić seamlessly connects your enterprise systems. With expertise in SAP, Microsoft Dynamics, and custom ERP solutions, Damjan Savić optimizes your business processes through intelligent integration and automation.", - keywords: ["ERP System Integration", "SAP Integration Germany", "Business Automation", "System Integration Specialist", "Enterprise Software Developer", "B2B Software Development"] - }, - ecommerce: { - title: "E-Commerce Solutions by Damjan Savić | Shopify, WooCommerce & Custom Shops", - description: "Damjan Savić develops powerful e-commerce platforms. From Shopify customizations to custom online shops, Damjan Savić delivers scalable solutions with payment integration, inventory management, and multi-channel distribution.", - keywords: ["E-Commerce Developer Germany", "Shopify Developer", "WooCommerce Integration", "Online Shop Development", "Payment Gateway Integration", "E-Commerce Solutions"] - }, - automation: { - title: "Business Process Automation by Damjan Savić | RPA & Workflow Optimization", - description: "Damjan Savić automates your business processes intelligently. Using Python, RPA tools, and custom workflows, Damjan Savić increases efficiency, reduces errors, and accelerates your digital transformation.", - keywords: ["Process Automation Germany", "Python Automation Developer", "RPA Development", "Workflow Automation", "Business Process Automation", "Task Automation"] - } - } - }, - skills: { - title: "Technology Stack", - categories: { - languages: { - title: "Programming Languages", - items: ["Python", "JavaScript", "TypeScript", "SQL", "Bash", "Go"] - }, - backend: { - title: "Backend Technologies", - items: ["FastAPI", "Django", "Node.js", "Express", "PostgreSQL", "MongoDB", "Redis", "GraphQL", "gRPC"] - }, - frontend: { - title: "Frontend Technologies", - items: ["React", "Next.js", "Vue.js", "Tailwind CSS", "Material-UI", "Framer Motion", "Redux", "Zustand"] - }, - ai: { - title: "AI/ML Tools", - items: ["OLLAMA", "LangChain", "OpenAI API", "Hugging Face", "TensorFlow", "PyTorch", "Scikit-learn", "Pandas"] - }, - devops: { - title: "DevOps & Cloud", - items: ["Docker", "Kubernetes", "AWS", "Azure", "CI/CD", "Git", "Linux", "Terraform", "Jenkins"] - } - } - }, - cta: { - title: "Ready for Your Next Project with Damjan Savić?", - description: "Damjan Savić transforms your ideas into reality. From conception to implementation, Damjan Savić delivers professional solutions.", - button: "Contact Damjan Savić - Free Initial Consultation" - }, - testimonials: { - title: "What Clients Say About Damjan Savić", - items: [ - { - text: "Damjan Savić transformed our legacy Python scripts into a modern cloud-native application. The automation solution by Damjan Savić saves us 4 hours of manual work daily.", - author: "Michael Schmidt", - role: "CTO, TechStart GmbH", - keywords: ["Damjan Savić Python Automation", "Cloud Migration Damjan Savić"] - }, - { - text: "The OLLAMA integration implemented by Damjan Savić enables AI features without cloud costs. Privacy and performance of Damjan Savić's solution are first-class.", - author: "Sarah Weber", - role: "Product Owner, DataSec AG", - keywords: ["Damjan Savić OLLAMA Integration", "AI Privacy Damjan Savić"] - }, - { - text: "Working with Damjan Savić on our e-commerce platform was excellent. The custom solutions by Damjan Savić increased our conversion rate by 35%.", - author: "Thomas Müller", - role: "CEO, ShopPro Solutions", - keywords: ["Damjan Savić E-Commerce", "Conversion Optimization Damjan Savić"] - } - ] - } -} \ No newline at end of file diff --git a/src/i18n/locales-old/sr/blog/index.ts b/src/i18n/locales-old/sr/blog/index.ts deleted file mode 100644 index 44c66d2..0000000 --- a/src/i18n/locales-old/sr/blog/index.ts +++ /dev/null @@ -1,175 +0,0 @@ -// src/i18n/locales/sr/blog/index.ts -export const blog = { - meta: { - title: 'Blog - JTL Integracija i Digitalna Rešenja', - description: 'Uvidi i najbolje prakse o JTL-WaWi, e-trgovini i digitalnoj transformaciji', - header: { - title: 'Uvidi i Najbolje Prakse', - subtitle: 'Uvidi i najbolje prakse o JTL-WaWi, e-trgovini i digitalnoj transformaciji' - } - }, - posts: { - 'erp-integration-breuninger': { - title: 'ApparelMagic i TradeByte: Analiza složenih integracija', - date: '2024-02-09', - excerpt: 'Detaljna analiza e-trgovinske integracije između Apparel Magic i Breuninger preko TradeByte', - category: 'Sistemska integracija', - tags: ['ERP', 'Apparel Magic', 'TradeByte', 'API Integration', 'Python', 'MariaDB'], - coverImage: '/images/posts/erp-integration-breuninger/cover.jpg', - content: { - intro: { - title: 'Apparel Magic susreće Breuninger: Tehnička analiza TradeByte integracije', - description: 'Integracija e-trgovinskih sistema sa uspostavljenim tržištima predstavlja poseban izazov za kompanije. U ovom članku delim svoje iskustvo iz složenog integracionog projekta između Apparel Magic kao ERP sistema i Breuninger platforme preko TradeByte.' - }, - background: { - title: 'Pozadina projekta', - systems: { - erp: 'Apparel Magic kao ERP sistem za podatke o proizvodima i upravljanje zalihama', - middleware: 'TradeByte kao middleware za Breuninger platformu' - }, - challenges: { - sync: 'Dvosmerna sinhronizacija porudžbina', - customers: 'Automatsko kreiranje kupaca', - delivery: 'Upravljanje otpremnicama', - inventory: 'Upravljanje zalihama u realnom vremenu' - } - }, - tech: { - title: 'Tehnička arhitektura', - components: { - title: 'Centralne komponente' - }, - database: { - title: 'Middleware baza podataka', - description: 'MariaDB baza podataka služi kao centralno skladište podataka za integraciju:' - } - }, - api: { - title: 'API integracije', - apparel_magic: { - title: 'Apparel Magic API', - description: 'REST API kompanije Apparel Magic se koristi za kreiranje kupaca i upravljanje zalihama:' - }, - tradebyte: { - title: 'TradeByte integracija', - description: 'TradeByte API koristi kombinaciju REST i XML:' - } - }, - order_process: { - title: 'Proces porudžbine', - steps: { - fetch: 'Redovno preuzimanje novih porudžbina sa TradeByte', - customers: 'Automatsko kreiranje kupaca u Apparel Magic', - process: 'Obrada porudžbina i ažuriranje statusa', - delivery: 'Generisanje i čuvanje otpremnica' - }, - delivery_notes: { - title: 'Upravljanje otpremnicama' - } - }, - challenges: { - title: 'Izazovi i rešenja', - status: { - title: '1. Upravljanje statusom', - description: 'Poseban izazov je bio upravljanje statusima porudžbina:' - }, - error_handling: { - title: '2. Rukovanje greškama i nadzor', - description: 'Robusno rukovanje greškama bilo je ključno za rad u produkciji:' - } - }, - best_practices: { - title: 'Najbolje prakse', - api: { - title: '1. API komunikacija', - items: { - retry: 'Implementacija mehanizama ponovnog pokušaja', - errors: 'Pažljivo rukovanje greškama', - logging: 'Detaljno logovanje svih komunikacija' - } - }, - data: { - title: '2. Upravljanje podacima', - items: { - storage: 'Centralno čuvanje podataka u MariaDB', - transactions: 'Sigurnost transakcija pri kritičnim operacijama', - validation: 'Redovna validacija podataka' - } - }, - automation: { - title: '3. Automatizacija procesa', - items: { - customers: 'Automatsko kreiranje kupaca', - status: 'Automatsko ažuriranje statusa', - delivery: 'Sistematsko upravljanje otpremnicama' - } - } - }, - lessons: { - title: 'Naučene lekcije', - api: { - title: '1. Dizajn API-ja', - items: { - docs: 'Temeljna API dokumentacija je neophodna', - auth: 'Razumevanje različitih metoda autentifikacije', - limits: 'Uzimanje u obzir ograničenja brzine' - } - }, - validation: { - title: '2. Validacija podataka', - items: { - rules: 'Implementacija strogih pravila validacije', - edge_cases: 'Pažljivo rukovanje specijalnim slučajevima', - cleanup: 'Automatsko čišćenje podataka' - } - }, - optimization: { - title: '3. Optimizacija procesa', - items: { - automation: 'Kontinuirano unapređenje automatizacije', - performance: 'Redovni pregledi performansi', - monitoring: 'Proaktivni nadzor' - } - } - }, - conclusion: { - title: 'Zaključak', - requirements: { - understanding: 'Duboko razumevanje oba sistema', - implementation: 'Pažljiva implementacija API komunikacije', - error_handling: 'Robusno rukovanje greškama', - monitoring: 'Kontinuirani nadzor' - }, - results: 'Razvijeno rešenje uspešno obrađuje porudžbine i omogućava besprekornu integraciju između sistema. Posebno se automatizovano kreiranje kupaca i upravljanje otpremnicama pokazali kao povećavači efikasnosti.' - } - } - }, - }, - ui: { - readMore: 'Pročitaj više', - loading: { - posts: 'Učitavaju se blog postovi...', - post: 'Učitava se blog post...' - }, - errors: { - posts: 'Greška pri učitavanju blog postova', - post: 'Traženi blog post ne postoji ili je premješten.' - }, - backToBlog: 'Nazad na blog', - publishedOn: 'Objavljeno dana', - category: 'Kategorija', - tags: 'Oznake', - notFound: { - title: 'Post nije pronađen', - message: 'Traženi blog post ne postoji ili je premješten.' - } - }, - categories: { - 'Integration': 'Integracija', - 'Entwicklung': 'Razvoj', - 'Automatisierung': 'Automatizacija' - } -} as const; - -export type BlogConfig = typeof blog; -export type BlogPost = BlogConfig['posts'][keyof BlogConfig['posts']]; diff --git a/src/i18n/locales-old/sr/blog/posts/erp-integration-breuninger.ts b/src/i18n/locales-old/sr/blog/posts/erp-integration-breuninger.ts deleted file mode 100644 index 0612b29..0000000 --- a/src/i18n/locales-old/sr/blog/posts/erp-integration-breuninger.ts +++ /dev/null @@ -1,138 +0,0 @@ -// src/i18n/locales/sr/blog/posts/erp-integration-breuninger.ts -export const erpIntegrationBreuninger = { - posts: { - erp_integration: { - title: 'ApparelMagic i TradeByte: Analiza kompleksnih integracija', - date: '2024-02-09', - excerpt: 'Detaljna analiza e-commerce integracije između Apparel Magic-a i Breuninger-a preko TradeByte-a', - category: 'Sistemska integracija', - tags: ['ERP', 'Apparel Magic', 'TradeByte', 'API integracija', 'Python', 'MariaDB'], - coverImage: '/images/posts/erp-integration-breuninger/cover.jpg', - intro: { - title: 'Apparel Magic susreće Breuninger: Tehnička analiza TradeByte integracije', - description: 'Integracija e-commerce sistema sa etabliranim marketplace-ima predstavlja poseban izazov za kompanije. U ovom članku delim svoja iskustva iz kompleksnog integracionog projekta između Apparel Magic-a kao ERP sistema i Breuninger platforme preko TradeByte-a.' - }, - background: { - title: 'Pozadina projekta', - systems: { - erp: 'Apparel Magic kao ERP sistem za podatke o proizvodima i upravljanje zalihama', - middleware: 'TradeByte kao middleware za Breuninger platformu' - }, - challenges: { - sync: 'Bidirekciona sinhronizacija porudžbina', - customers: 'Automatsko kreiranje kupaca', - delivery: 'Upravljanje otpremnicama', - inventory: 'Upravljanje zalihama u realnom vremenu' - } - }, - tech: { - title: 'Tehnička arhitektura', - components: { - title: 'Centralne komponente' - }, - database: { - title: 'Middleware baza podataka', - description: 'MariaDB baza podataka služi kao centralno skladište podataka za integraciju:' - } - }, - api: { - title: 'API integracije', - apparel_magic: { - title: 'Apparel Magic API', - description: 'REST API Apparel Magic-a se koristi za kreiranje kupaca i upravljanje zalihama:' - }, - tradebyte: { - title: 'TradeByte integracija', - description: 'TradeByte API koristi kombinaciju REST-a i XML-a:' - } - }, - order_process: { - title: 'Proces poručivanja', - steps: { - fetch: 'Redovno preuzimanje novih porudžbina sa TradeByte-a', - customers: 'Automatsko kreiranje kupaca u Apparel Magic-u', - process: 'Obrada porudžbina i ažuriranje statusa', - delivery: 'Generisanje i čuvanje otpremnica' - }, - delivery_notes: { - title: 'Upravljanje otpremnicama' - } - }, - challenges: { - title: 'Izazovi i rešenja', - status: { - title: '1. Upravljanje statusima', - description: 'Poseban izazov je bilo upravljanje statusima porudžbina:' - }, - error_handling: { - title: '2. Obrada grešaka i monitoring', - description: 'Robusna obrada grešaka je bila ključna za rad u produkciji:' - } - }, - best_practices: { - title: 'Najbolje prakse', - api: { - title: '1. API komunikacija', - items: { - retry: 'Implementacija retry mehanizama', - errors: 'Pažljivo rukovanje greškama', - logging: 'Detaljno logovanje sve komunikacije' - } - }, - data: { - title: '2. Upravljanje podacima', - items: { - storage: 'Centralno skladištenje podataka u MariaDB', - transactions: 'Transakciona sigurnost kod kritičnih operacija', - validation: 'Redovna validacija podataka' - } - }, - automation: { - title: '3. Automatizacija procesa', - items: { - customers: 'Automatizovano kreiranje kupaca', - status: 'Automatsko ažuriranje statusa', - delivery: 'Sistematsko upravljanje otpremnicama' - } - } - }, - lessons: { - title: 'Naučene lekcije', - api: { - title: '1. API dizajn', - items: { - docs: 'Temeljna API dokumentacija je ključna', - auth: 'Razumevanje različitih metoda autentifikacije', - limits: 'Uzimanje u obzir rate limit-a' - } - }, - validation: { - title: '2. Validacija podataka', - items: { - rules: 'Implementacija strogih pravila validacije', - edge_cases: 'Pažljivo rukovanje posebnim slučajevima', - cleanup: 'Automatsko čišćenje podataka' - } - }, - optimization: { - title: '3. Optimizacija procesa', - items: { - automation: 'Kontinuirano poboljšanje automatizacije', - performance: 'Redovne provere performansi', - monitoring: 'Proaktivni monitoring' - } - } - }, - conclusion: { - title: 'Zaključak', - requirements: { - understanding: 'Duboko razumevanje oba sistema', - implementation: 'Pažljiva implementacija API komunikacije', - error_handling: 'Robusna obrada grešaka', - monitoring: 'Kontinuirani monitoring' - }, - results: 'Razvijeno rešenje uspešno obrađuje porudžbine i omogućava besprekornu integraciju između sistema. Posebno su se automatizovano kreiranje kupaca i upravljanje otpremnicama pokazali kao faktori koji povećavaju efikasnost.' - } - } - } -}; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/blog/posts/fullstack-development-timetracking.ts b/src/i18n/locales-old/sr/blog/posts/fullstack-development-timetracking.ts deleted file mode 100644 index b9cc681..0000000 --- a/src/i18n/locales-old/sr/blog/posts/fullstack-development-timetracking.ts +++ /dev/null @@ -1,253 +0,0 @@ -// src/i18n/locales/sr/blog/posts/fullstack-development-timetracking.ts -export const fullstackDevelopmentTimetracking = { - meta: { - title: 'Fullstack razvoj sa Python-om i React-om: Arhitektura našeg rešenja za evidenciju radnog vremena', - date: '2024-02-09', - excerpt: 'Tehnički dubinski uvid u implementaciju modernog rešenja za evidenciju radnog vremena', - category: 'Sistemska arhitektura', - coverImage: '/images/posts/fullstack-development-timetracking/cover.jpg', - tags: ['Python', 'React', 'TypeScript', 'MSSQL', 'System Design'] - }, - content: { - intro: { - title: 'Fullstack razvoj sa Python-om i React-om: Arhitektura našeg rešenja za evidenciju radnog vremena', - description: 'Razvoj robusnog rešenja za evidenciju radnog vremena zahteva ne samo tehničko znanje, već i duboko razumevanje kompleksnih poslovnih pravila i korisničkih zahteva. U ovom članku delim naša iskustva u implementaciji modernog fullstack rešenja za evidenciju radnog vremena sa Python-om i React-om.' - }, - systemArchitecture: { - title: 'Sistemska arhitektura', - frontend: { - title: 'Frontend (Next.js + TypeScript)', - description: 'Frontend arhitektura je bazirana na Next.js-u sa TypeScript-om i prati komponentni pristup:', - code: { - types: `// types/TimeEntry.ts -interface TimeEntry { - id: number; - date: string; - checkIn: string; - checkOut: string | null; - userId: number; - status: 'complete' | 'incomplete'; -}`, - component: `// components/TimeEntryForm.tsx -const TimeEntryForm: React.FC = ({ onSubmit }) => { - const [entry, setEntry] = useState({ - date: new Date().toISOString().split('T')[0], - checkIn: new Date().toLocaleTimeString(), - checkOut: null, - status: 'incomplete' - }); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (!validateTimeEntry(entry)) return; - try { - await onSubmit(entry); - } catch (error) { - console.error('Error submitting time entry:', error); - } - }; - return ( -
- setEntry({ ...entry, date })} - /> - setEntry({ ...entry, checkIn: time })} - /> - {/* Additional form elements */} - - ); -};` - } - }, - backend: { - title: 'Backend (Flask + MSSQL)', - description: 'Backend koristi Flask za API i MSSQL za perzistenciju podataka:', - code: { - models: `# models/time_entry.py -class TimeEntry(db.Model): - __tablename__ = 'Stundenzettel' - id = db.Column('ID', db.Decimal, primary_key=True) - personal_id = db.Column('Personal_ID', db.Decimal) - datum = db.Column('Datum', db.Date) - kommen = db.Column('Kommen', db.Time) - gehen = db.Column('Gehen', db.Time) - @validates('gehen') - def validate_checkout(self, key, value): - if value and value < self.kommen: - raise ValueError('Checkout time cannot be before checkin time') - return value`, - routes: `# routes/time_entries.py -@app.route('/api/time-entries', methods=['POST']) -@jwt_required -def create_time_entry(): - data = request.get_json() - user_id = get_jwt_identity() - try: - validate_time_entry_creation(data, user_id) - entry = TimeEntry( - personal_id=user_id, - datum=data['date'], - kommen=data['checkIn'], - gehen=data.get('checkOut') - ) - db.session.add(entry) - db.session.commit() - return jsonify(entry.to_dict()), 201 - except ValidationError as e: - return jsonify({'error': str(e)}), 400` - } - } - }, - businessLogic: { - title: 'Implementacija poslovne logike', - validation: { - title: 'Validacija vremenskih unosa', - description: 'Logika validacije osigurava da su sva poslovna pravila ispoštovana:', - code: `def validate_time_entry_creation(data: dict, user_id: int) -> None: - '''Validates a new time entry according to business rules.''' - # Check for existing incomplete entries - incomplete_entry = TimeEntry.query.filter_by( - personal_id=user_id, - gehen=None, - datum=data['date'] - ).first() - if incomplete_entry: - raise ValidationError('Cannot create new entry while incomplete entry exists') - # Check for time overlap with existing entries - overlapping_entry = TimeEntry.query.filter( - TimeEntry.personal_id == user_id, - TimeEntry.datum == data['date'], - TimeEntry.kommen <= data['checkIn'], - TimeEntry.gehen >= data['checkIn'] - ).first() - if overlapping_entry: - raise ValidationError('Time entry overlaps with existing entry')` - } - }, - databaseDesign: { - title: 'Dizajn baze podataka', - description: 'MSSQL šema baze podataka je dizajnirana za efikasnost i integritet:', - code: `CREATE TABLE dbo.Stundenzettel ( - ID decimal NOT NULL PRIMARY KEY, - Personal_ID decimal, - Datum date, - Kommen time, - Gehen time, - xStatus int, - xBenutzer nvarchar(15), - xDatum datetime, - xVersion timestamp -); -CREATE INDEX idx_personal_datum -ON dbo.Stundenzettel(Personal_ID, Datum);` - }, - security: { - title: 'Implementacija sigurnosti', - authentication: { - title: 'JWT autentifikacija', - code: `# auth/jwt_handler.py -from flask_jwt_extended import create_access_token -def authenticate_user(username: str, password: str) -> str: - user = Personal.query.filter_by( - Benutzername=username, - Passwort=password # In production, use proper password hashing - ).first() - if not user: - raise AuthenticationError('Invalid credentials') - return create_access_token(identity=user.ID)` - } - }, - bestPractices: { - title: 'Najbolje prakse i naučene lekcije', - points: [ - { - title: 'Validacija podataka na više nivoa', - items: [ - 'Frontend validacija za trenutni feedback', - 'Backend validacija za poslovna pravila', - 'Database constraints za integritet podataka' - ] - }, - { - title: 'Rukovanje greškama', - items: [ - 'Strukturirane poruke o greškama', - 'Korisnički prijateljske poruke o greškama na frontendu', - 'Detaljno logovanje na backendu' - ] - }, - { - title: 'Optimizacija performansi', - items: [ - 'Indeksiranje kritičnih polja u bazi', - 'Frontend keširanje vremenskih unosa', - 'Lazy loading za istorijske podatke' - ] - } - ] - }, - challenges: { - title: 'Izazovi i rešenja', - timezones: { - title: '1. Rukovanje vremenskim zonama', - description: 'Poseban izazov je bilo ispravno rukovanje vremenskim zonama:', - code: `// utils/dateTime.ts -export const formatTimeForDisplay = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toLocaleTimeString('de-DE', { - hour: '2-digit', - minute: '2-digit' - }); -}; -export const formatTimeForAPI = (time: string): string => { - return new Date(\`1970-01-01T\${time}\`).toISOString().split('T')[1]; -};` - }, - concurrency: { - title: '2. Istovremena ažuriranja', - description: 'Rukovanje istovremenim ažuriranjima je zahtevalo posebnu pažnju:', - code: `from sqlalchemy import and_, or_ -def update_time_entry(entry_id: int, data: dict) -> TimeEntry: - entry = TimeEntry.query.filter_by(id=entry_id).with_for_update().first() - if not entry: - raise NotFoundError('Time entry not found') - # Optimistic locking using version field - if entry.xVersion != data['version']: - raise ConcurrencyError('Entry was modified by another user') - entry.gehen = data.get('checkOut') - db.session.commit() - return entry` - }, - offline: { - title: '3. Offline funkcionalnost', - description: 'Za offline funkcionalnost implementirali smo Service Worker strategiju:', - code: `// service-worker.ts -const CACHE_NAME = 'timetracking-v1'; -self.addEventListener('fetch', (event) => { - event.respondWith( - caches.match(event.request).then(response => { - return response || fetch(event.request).then(response => { - return caches.open(CACHE_NAME).then(cache => { - cache.put(event.request, response.clone()); - return response; - }); - }); - }) - ); -});` - } - }, - conclusion: { - title: 'Zaključak', - description: 'Razvoj rešenja za evidenciju radnog vremena zahteva pažljivo planiranje i razmatranje brojnih poslovnih pravila. Korišćenjem modernih tehnologija kao što su Next.js, TypeScript i Flask, uspeli smo da implementiramo robusno i korisnički prijateljsko rešenje.', - keyPoints: [ - 'Striktna tipizacija sa TypeScript-om', - 'Sveobuhvatna logika validacije', - 'Efikasan dizajn baze podataka', - 'Korisnički prijateljsko rukovanje greškama' - ], - results: 'Rešenje je uspešno u upotrebi već nekoliko meseci i pouzdano obrađuje stotine vremenskih unosa dnevno.' - } - } -}; diff --git a/src/i18n/locales-old/sr/blog/posts/rfid-automation.ts b/src/i18n/locales-old/sr/blog/posts/rfid-automation.ts deleted file mode 100644 index a55b2f6..0000000 --- a/src/i18n/locales-old/sr/blog/posts/rfid-automation.ts +++ /dev/null @@ -1,204 +0,0 @@ -// src/i18n/locales/sr/blog/posts/rfid-automation.ts -export const rfidAutomation = { - meta: { - title: 'RFID automatizacija etiketa: Od baze podataka do štampača', - date: '2024-02-09', - excerpt: 'Detaljna tehnička analiza implementacije automatizovanog sistema za štampanje RFID etiketa sa Python-om', - category: 'Sistemska integracija', - coverImage: '/images/posts/rfid-automation/cover.jpg', - tags: ['RFID', 'Python', 'ZPL', 'Automatizacija', 'Zebra štampač', 'EPC'] - }, - content: { - intro: { - title: 'RFID automatizacija etiketa: Od baze podataka do štampača', - description: 'U modernim logističkim i maloprodajnim okruženjima, efikasno i besprekorno označavanje proizvoda RFID tagovima je od ključnog značaja. U ovom članku delim svoja iskustva u implementaciji automatizovanog rešenja za generisanje i štampanje RFID etiketa sa kodiranjem čipa.' - }, - requirements: { - title: 'Pozadina projekta', - points: [ - 'Automatsko generisanje EPC kodova (Electronic Product Code)', - 'Kreiranje ZPL koda za Zebra štampače', - 'Direktna mrežna komunikacija sa štampačem', - 'Integracija sa postojećim podacima o proizvodima', - 'Rukovanje greškama i logovanje' - ] - }, - implementation: { - title: 'Tehnička implementacija', - epcGeneration: { - title: 'Generisanje EPC koda', - description: 'EPC kodovi se generišu prema SGTIN standardu (Serialized Global Trade Item Number):', - code: `def generate_encoded_epc(company_prefix, indicator, item_ref, serial): - sgtin = SGTIN(company_prefix, indicator, item_ref, serial) - return sgtin.encode()` - }, - zplTemplates: { - title: 'Upravljanje ZPL šablonima', - description: 'Za različite tipove etiketa implementirani su ZPL šabloni:', - code: `def generate_zpl_code(artikelnr, description, ean, price, material, water_resistance, glass_type, encoded_epc): - formatted_price = f'{price:.2f}' - return f''' -CT~~CD,~CC^~CT~ -^XA -~TA000 -~JSN -^LT35 -^MNW -^MTT -^PON -^PMN -^LH0,0 -^JMA -^PR2,2 -~SD23 -^JUS -^LRN -^CI27 -^PA0,1,1,0 -^RS8,,,3 -^XZ -^XA -^MMT -^PW413 -^LL531 -^LS-24 -^FT150,57^A0N,33,33^FH\\^CI27^FD{artikelnr}^FS^CI27 -^FT44,86^A0N,21,20^FH\\^CI27^FD{description}^FS^CI27 -^FT130,141^A0N,50,51^FH\\^CI27^FD{formatted_price} €^FS^CI27 -^FT167,175^A0N,21,20^FH\\^CI27^FD{material}^FS^CI27 -^FT185,201^A0N,21,20^FH\\^CI27^FD{water_resistance}^FS^CI27 -^FT155,227^A0N,21,20^FH\\^CI27^FD{glass_type}^FS^CI27 -^BY3,2,113^FT73,420^BEN,,Y,N -^FH\\^FD{ean}^FS -^RFW,H,1,2,1^FD3000^FS -^RFW,H,2,12,1^FD{encoded_epc}^FS -^PQ1,0,1,Y -^XZ'''` - }, - printerCommunication: { - title: 'Mrežna komunikacija sa štampačem', - description: 'Komunikacija sa Zebra štampačem se odvija preko TCP/IP:', - code: `def send_to_printer(data, printer_ip='192.168.68.50', printer_port=9100): - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.connect((printer_ip, printer_port)) - sock.sendall(data.encode('utf-8')) - logger.info('Podaci uspešno poslati štampaču') - except Exception as e: - logger.error(f'Greška pri slanju podataka štampaču: {e}')` - }, - serialNumberManagement: { - title: 'Obrada podataka i upravljanje serijskim brojevima', - description: 'Upravljanje serijskim brojevima je kritično za jedinstvenost EPC kodova:', - code: `def initialize_serial_number(): - global current_serial_number - try: - serial_log_content = SERIAL_NUMBER_LOG_PATH.read_text().strip() - current_serial_number = int(serial_log_content) - except (FileNotFoundError, ValueError): - current_serial_number = START_SERIAL_NUMBER -def get_next_serial_number(): - global current_serial_number - current_serial_number += 1 - return current_serial_number -def finalize_serial_number(): - SERIAL_NUMBER_LOG_PATH.write_text(str(current_serial_number))` - } - }, - features: { - title: 'Implementirane funkcionalnosti', - errorHandling: { - title: '1. Robusno rukovanje greškama', - points: [ - 'Validacija ulaznih podataka', - 'Provera mrežne veze', - 'Perzistencija serijskih brojeva', - 'Detaljno logovanje svih operacija' - ] - }, - configurability: { - title: '2. Konfigurabilnost', - points: [ - 'Podesiva IP adresa i port štampača', - 'Prilagodljivi ZPL šabloni', - 'Fleksibilno generisanje EPC kodova', - 'Podesivi opsezi serijskih brojeva' - ] - }, - scalability: { - title: '3. Skalabilnost', - points: [ - 'Batch obrada podataka o proizvodima', - 'Mogući paralelni zadaci štampanja', - 'Efikasno upravljanje resursima', - 'Modularan kod za jednostavno proširivanje' - ] - } - }, - bestPractices: { - title: 'Najbolje prakse', - dataValidation: { - title: '1. Validacija podataka', - points: [ - 'Striktna tipizacija za kritična polja podataka', - 'Provera obaveznih polja', - 'Provere formata i verodostojnosti' - ] - }, - faultTolerance: { - title: '2. Tolerancija na greške', - points: [ - 'Automatski pokušaji ponavljanja', - 'Graceful degradacija', - 'Detaljni zapisi o greškama' - ] - }, - maintainability: { - title: '3. Održivost', - points: [ - 'Modularna struktura koda', - 'Detaljna dokumentacija', - 'Jasno odvajanje konfiguracije i koda' - ] - } - }, - lessonsLearned: { - title: 'Naučene lekcije', - zplSpecifics: { - title: '1. ZPL specifičnosti', - points: [ - 'Neophodno precizno poznavanje ZPL specifikacija', - 'Pažljiva validacija generisanih ZPL kodova', - 'Redovno testiranje sa različitim modelima štampača' - ] - }, - rfidStandards: { - title: '2. RFID standardi', - points: [ - 'Kritično poštovanje EPC standarda', - 'Pažljivo upravljanje serijskim brojevima', - 'Validacija generisanih EPC kodova' - ] - }, - networkCommunication: { - title: '3. Mrežna komunikacija', - points: [ - 'Robusno rukovanje mrežnim problemima', - 'Tajmauti i pokušaji ponavljanja', - 'Baferovanje zadataka štampanja' - ] - } - }, - conclusion: { - title: 'Zaključak', - description: 'Implementirano rešenje omogućava efikasnu i pouzdanu automatizaciju procesa RFID označavanja. Kombinacijom generisanja EPC kodova, upravljanja ZPL šablonima i direktne komunikacije sa štampačem, kreiran je robustan sistem koji se dokazao u praksi.', - keyPoints: [ - 'Temeljno planiranje sistemske arhitekture', - 'Sveobuhvatno rukovanje greškama', - 'Pažljiva dokumentacija', - 'Redovno testiranje i validacija' - ], - results: 'Rešenje stabilno radi u produkciji već nekoliko meseci i svakodnevno obrađuje stotine etiketa.' - } - } -}; diff --git a/src/i18n/locales-old/sr/common.ts b/src/i18n/locales-old/sr/common.ts deleted file mode 100644 index 92cbf0d..0000000 --- a/src/i18n/locales-old/sr/common.ts +++ /dev/null @@ -1,99 +0,0 @@ -export const common = { - // SEO & Meta - siteTitle: 'Damjan Savić - Digitalna rešenja & JTL integracija', - siteDescription: 'Programer individualnih rešenja za automatizaciju procesa', - // Navigation - nav: { - home: 'Početna', - about: 'O meni', - services: 'Usluge', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - }, - // Common Actions - actions: { - readMore: 'Pročitaj više', - viewMore: 'Prikaži više', - viewAll: 'Prikaži sve', - back: 'Nazad', - close: 'Zatvori', - submit: 'Pošalji', - loading: 'Učitavanje...' - }, - // UI Components - ui: { - published: 'Objavljeno', - lastUpdated: 'Poslednje ažuriranje', - category: 'Kategorija', - categories: 'Kategorije', - tag: 'Oznaka', - tags: 'Oznake', - author: 'Autor', - minuteRead: 'minuta čitanja', - tableOfContents: 'Sadržaj' - }, - // Error Messages - errors: { - generic: 'Došlo je do greške', - notFound: 'Stranica nije pronađena', - loading: 'Greška pri učitavanju', - return: 'Povratak na početnu stranicu' - }, - // Loading States - loading: { - content: 'Učitavanje sadržaja', - page: 'Učitavanje stranice', - processing: 'Obrada u toku' - }, - // Dates - dates: { - months: { - long: [ - 'Januar', 'Februar', 'Mart', 'April', 'Maj', 'Jun', - 'Jul', 'Avgust', 'Septembar', 'Oktobar', 'Novembar', 'Decembar' - ], - short: [ - 'Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', - 'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec' - ] - }, - weekdays: { - long: [ - 'Nedelja', 'Ponedeljak', 'Utorak', 'Sreda', - 'Četvrtak', 'Petak', 'Subota' - ], - short: ['Ned', 'Pon', 'Uto', 'Sre', 'Čet', 'Pet', 'Sub'] - } - }, - // Social Media - social: { - followMe: 'Pratite me na', - shareOn: 'Podeli na', - linkedin: 'LinkedIn', - github: 'GitHub', - email: 'E-mail' - }, - // Contact Form - contact: { - title: 'Kontakt', - name: 'Ime', - email: 'E-mail', - message: 'Poruka', - submit: 'Pošalji poruku', - success: 'Vaša poruka je uspešno poslata', - error: 'Došlo je do greške pri slanju vaše poruke' - }, - // Accessibility - a11y: { - skipToContent: 'Preskoči na glavni sadržaj', - menuOpen: 'Otvori meni', - menuClose: 'Zatvori meni', - darkMode: 'Promeni tamni režim', - carousel: { - next: 'Sledeća slika', - previous: 'Prethodna slika' - } - } -} as const; -export type CommonTranslations = typeof common; diff --git a/src/i18n/locales-old/sr/cookiebanner.ts b/src/i18n/locales-old/sr/cookiebanner.ts deleted file mode 100644 index f2b93c9..0000000 --- a/src/i18n/locales-old/sr/cookiebanner.ts +++ /dev/null @@ -1,14 +0,0 @@ -const cookiebanner = { - cookies: { - message: "Ovaj sajt koristi kolačiće za bolje iskustvo pretraživanja. Podaci neće biti deljeni sa trećim licima.", - accept: "Prihvati kolačiće", - decline: "Odbij", - necessary: "Neophodni kolačići", - necessaryDesc: "Za osnovne funkcije sajta", - analytics: "Analitički kolačići", - analyticsDesc: "Za analizu korišćenja sajta", - learnMore: "Saznajte više" - } -}; - -export default cookiebanner; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/faq.ts b/src/i18n/locales-old/sr/faq.ts deleted file mode 100644 index 7263eb0..0000000 --- a/src/i18n/locales-old/sr/faq.ts +++ /dev/null @@ -1,37 +0,0 @@ -export const faq = { - title: 'Često postavljana pitanja', - moreQuestions: 'Imate još pitanja?', - contactUs: 'Kontaktirajte nas', - questions: [ - { - question: "Kako mogu da koristim Python za automatizaciju procesa?", - answer: "Python je odličan za automatizaciju procesa kroz biblioteke kao što su Selenium za web automatizaciju, Pandas za obradu podataka i Schedule za vremenski zakazane zadatke. Razvijam prilagođena rešenja za automatizaciju vaših poslovnih procesa.", - category: "python" - }, - { - question: "Šta čini OLLAMA idealnim za lokalni razvoj veštačke inteligencije?", - answer: "OLLAMA omogućava pokretanje velikih jezičkih modela lokalno, što garantuje privatnost podataka i smanjuje troškove API-ja. Specijalizovan sam za integraciju OLLAMA-e u aplikacije za prilagođena AI rešenja bez zavisnosti od oblaka.", - category: "ai" - }, - { - question: "Koje su prednosti Electron desktop aplikacija?", - answer: "Electron omogućava razvoj desktop aplikacija za više platformi koristeći web tehnologije. Dobijate nativnu aplikaciju za Windows, Mac i Linux iz jedne baze koda. Idealno za alate koji zahtevaju kompleksan UI i offline funkcionalnost.", - category: "electron" - }, - { - question: "Koliko dugo traje razvoj web aplikacije?", - answer: "Vreme razvoja zavisi od obima. MVP može biti razvijen za 4-8 nedelja, dok kompleksne enterprise aplikacije zahtevaju 3-6 meseci. Radim agilno i isporučujem upotrebljive rezultate u dvonedeljnim sprintovima.", - category: "general" - }, - { - question: "Možete li konvertovati postojeće Python skripte u web aplikacije?", - answer: "Da, mogu transformisati vaše Python skripte u moderne web aplikacije sa FastAPI ili Django backend-om i React frontend-om. Ovo omogućava multi-korisnički pristup, bolji UI/UX i centralizovano upravljanje podacima.", - category: "python" - }, - { - question: "Kako integrisati veštačku inteligenciju u postojeće poslovne procese?", - answer: "Analiziram vaše radne tokove i identifikujem potencijal za automatizaciju. Koristeći OLLAMA ili druge AI modele, razvijam rešenja za analizu teksta, obradu dokumenata, automatizaciju korisničke podrške ili ekstrakciju podataka - sve u skladu sa privatnošću podataka on-premise.", - category: "ai" - } - ] -}; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/footer.ts b/src/i18n/locales-old/sr/footer.ts deleted file mode 100644 index 40b6086..0000000 --- a/src/i18n/locales-old/sr/footer.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/sr/footer.ts -const footer = { - sections: { - contact: { - title: "Kontakt", - email: "info@damjan-savic.com", - location: "Keln, Nemačka", - aria: { - emailLink: "Pošalji email", - locationText: "Lokacija" - } - }, - navigation: { - title: "Navigacija", - links: { - portfolio: "Portfolio", - blog: "Blog", - about: "O meni", - contact: "Kontakt" - } - }, - social: { - title: "Društvene mreže", - aria: { - linkedin: "Posetite moj LinkedIn profil", - github: "Posetite moj GitHub profil" - } - } - }, - legal: { - copyright: "Sva prava zadržana", - links: { - privacy: "Zaštita podataka", - imprint: "Impresum", - terms: "Uslovi korišćenja" - } - } -} as const; - -export default footer; -export type FooterTranslations = typeof footer; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/index.ts b/src/i18n/locales-old/sr/index.ts deleted file mode 100644 index d928d47..0000000 --- a/src/i18n/locales-old/sr/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -// src/i18n/locales/sr/index.ts - -// Prevodi blog postova -import { erpIntegrationBreuninger } from './blog/posts/erp-integration-breuninger'; -import { fullstackDevelopmentTimetracking } from './blog/posts/fullstack-development-timetracking'; -import { rfidAutomation as blogRfidAutomation } from './blog/posts/rfid-automation'; -import { blog } from './blog'; - -// Prevodi stranica -import { about } from './pages/about/index'; -import { contact } from './pages/contact/index'; -import { dashboard } from './pages/dashboard'; -import { home } from './pages/home/index'; -import { login } from './pages/login'; -import { notfound } from './pages/notfound'; -import { portfolio as portfolioPage } from './pages/portfolio'; -import { privacy } from './pages/privacy'; -import { terms } from './pages/terms'; - -// Prevodi portfolio projekata -import { aiDataReader } from './portfolio/projects/ai-data-reader'; -import { portfolio } from './portfolio'; - -// Zajednički prevodi i konfiguracije -import { common } from './common'; -import { meta } from './meta'; -import { navigation } from './navigation'; - -// Footer prevodi -import footer from './footer'; - -// FAQ prevodi -import { faq } from './faq'; - -// Objedinjavanje svih prevoda -const translations = { - // Stranice - pages: { - about, - contact, - dashboard, - home, - login, - notfound, - portfolio: portfolioPage, - privacy, - terms, - }, - // Blog - blog: { - ...blog, - posts: { - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - rfidAutomation: blogRfidAutomation, - }, - }, - // Portfolio - portfolio: { - ...portfolio, - projects: { - aiDataReader, - }, - }, - // Footer - footer, - // Zajedničke konfiguracije - common: { - ...common, - cookies: { - message: "Ovaj sajt koristi kolačiće kako bi poboljšao vaše iskustvo pretraživanja i pružio personalizovan sadržaj. Prikupljeni podaci neće biti deljeni sa trećim licima.", - accept: "Prihvati kolačiće", - decline: "Odbij", - necessary: "Neophodni kolačići", - necessaryDesc: "Za osnovne funkcije sajta", - analytics: "Analitički kolačići", - analyticsDesc: "Za analizu korišćenja sajta", - learnMore: "Saznajte više" - } - }, - meta, - navigation, - faq, -} as const; - -// Default izvoz: kompletan objekat prevoda -export default translations; - -// Definicija tipa za prevode -export type Translations = typeof translations; - -// Re-izvoz za direktan pristup pojedinačnim modulima -export { - // Stranice - about, - contact, - dashboard, - home, - login, - notfound, - portfolioPage as portfolioPageTranslations, - privacy, - terms, - // Blog - blog, - erpIntegrationBreuninger, - fullstackDevelopmentTimetracking, - blogRfidAutomation as blogRfidAutomationPost, - // Portfolio - portfolio, - aiDataReader, - // Footer - footer, - // Zajedničko - common, - meta, - navigation, - faq, -}; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/meta.ts b/src/i18n/locales-old/sr/meta.ts deleted file mode 100644 index 0ac9d70..0000000 --- a/src/i18n/locales-old/sr/meta.ts +++ /dev/null @@ -1,101 +0,0 @@ -export const meta = { - site: { - name: 'Damjan Savić | Дамјан Савић', - title: 'Damjan Savić | Fullstack, IoT и AI програмер', - subtitle: 'Скалабилна софтверска решења са IoT и AI интеграцијом', - description: 'Као fullstack програмер из Келна, Дамјан Савић се специјализује за развој скалабилних софтверских решења са IoT и AI интеграцијом.', - keywords: [ - 'Damjan Savić', - 'Дамјан Савић', - 'Старији програмер пуног стека', - 'Консултант за дигитална решења', - 'Софтвер за предузећа', - 'Облак архитектура', - 'Интеграција вештачке интелигенције', - 'JTL интеграција Немачка', - 'Е-трговина решења Европа', - 'Аутоматизација процеса', - 'ERP системи', - 'Python развој', - 'React програмирање', - 'Дигитална трансформација Келн', - 'Програмер Немачка', - 'IT консултант Европа' - ].join(', ') - }, - company: { - name: 'CoderConda', - shortName: 'CoderConda', - description: 'Vaš JTL-servisni partner za brza, pouzdana i ekonomična rešenja.', - address: 'Rotdornallee', - city: 'Köln', - postalCode: '50999', - country: 'Nemačka', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - website: 'www.damjan-savic.com' - }, - author: { - name: 'Damjan Savić | Дамјан Савић', - role: 'Старији програмер пуног стека | Консултант за дигитална решења', - company: 'CoderCond', - location: 'Oberhausen, Nemačka', - email: 'info@damjan-savic.com', - website: 'https://www.damjan-savic.com', - languages: [ - { code: 'en', level: 'C2', name: 'Engleski' }, - { code: 'sr', level: 'C2', name: 'Srpski' }, - { code: 'de', level: 'C2', name: 'Nemački' }, - { code: 'fr', level: 'B2', name: 'Francuski' }, - { code: 'es', level: 'B2', name: 'Španski' }, - { code: 'ru', level: 'A1', name: 'Ruski' } - ] - }, - social: { - linkedin: 'https://www.linkedin.com/in/damjansavic/', - github: 'https://github.com/damjansavic', - email: 'info@damjan-savic.com' - }, - expertise: { - areas: [ - 'JTL integracija i savetovanje', - 'Automatizacija procesa', - 'E-commerce razvoj', - 'Sistemska integracija', - 'ERP sistemi', - 'Digitalna transformacija' - ], - technologies: [ - 'Python', - 'React/Next.js', - 'MariaDB', - 'Docker', - 'JTL-WaWi', - 'Shopify', - 'Shopware' - ] - }, - seo: { - defaultLanguage: 'de', - alternateLanguages: ['en', 'sr'], - robots: 'index, follow', - googleSiteVerification: '', // Po potrebi - og: { - type: 'website', - locale: 'sr_RS', - siteName: 'Damjan Savić - Старији програмер пуног стека | Консултант за дигитална решења', - images: { - url: '/images/og-image.jpg', - width: 1200, - height: 630, - alt: 'Damjan Savić (Дамјан Савић) - Старији програмер пуног стека и консултант за дигитална решења у Немачкој' - } - }, - twitter: { - card: 'summary_large_image', - site: '@damjansavic', - creator: '@damjansavic' - } - } -} as const; -export type MetaConfig = typeof meta; diff --git a/src/i18n/locales-old/sr/navigation.ts b/src/i18n/locales-old/sr/navigation.ts deleted file mode 100644 index 30c5895..0000000 --- a/src/i18n/locales-old/sr/navigation.ts +++ /dev/null @@ -1,79 +0,0 @@ -// C:\Development\Damjan Savic\Portfolio\src\i18n\locales\sr\navigation.ts -export const navigation = { - // Glavna navigacija - main: { - home: 'Početna', - about: 'O meni', - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - }, - // Dashboard i Admin - admin: { - login: 'Prijava', - dashboard: 'Dashboard', - logout: 'Odjava' - }, - // Footer navigacija - footer: { - legal: { - privacy: 'Politika privatnosti', - terms: 'Uslovi korišćenja', - imprint: 'Impresum' - }, - sections: { - portfolio: 'Portfolio', - blog: 'Blog', - contact: 'Kontakt' - } - }, - // Sekcije stranice - sections: { - experience: 'Iskustvo', - skills: 'Veštine', - projects: 'Projekti', - about: 'O meni' - }, - // Breadcrumbs i navigacija za povratak - navigation: { - backTo: { - home: 'Nazad na početnu', - portfolio: 'Nazad na portfolio', - blog: 'Nazad na blog' - }, - breadcrumbs: { - home: 'Početna', - portfolio: 'Portfolio', - blog: 'Blog', - about: 'O meni', - contact: 'Kontakt' - } - }, - // Mobile navigacija - mobile: { - menu: 'Meni', - close: 'Zatvori', - open: 'Otvori meni' - }, - // URL-ovi (za dinamičko generisanje ruta) - urls: { - home: '/', - about: '/about', - portfolio: '/portfolio', - blog: '/blog', - contact: '/contact', - login: '/login', - dashboard: '/dashboard', - privacy: '/privacy', - terms: '/terms' - }, - // Meta informacije za navigaciju - meta: { - main: 'Glavna navigacija', - footer: 'Footer navigacija', - social: 'Navigacija društvenih mreža', - legal: 'Pravna navigacija' - } -} as const; - -export type NavigationConfig = typeof navigation; diff --git a/src/i18n/locales-old/sr/pages/about/hero.ts b/src/i18n/locales-old/sr/pages/about/hero.ts deleted file mode 100644 index 58a0098..0000000 --- a/src/i18n/locales-old/sr/pages/about/hero.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const hero = { - // Navigation/Header - aboutMe: 'O MENI', - // Main Section - title: 'Ekspert za digitalna rešenja', - description: 'Sa iskustvom u razvoju softvera i ekspertizom u digitalnoj transformaciji, pomažem kompanijama da optimizuju i automatizuju svoje procese kroz inovativna rešenja.', - // Expertise Areas - expertise: { - processAutomation: { - title: 'Automatizacija procesa', - description: 'Razvoj efikasnih automatizovanih tokova rada' - }, - systemIntegration: { - title: 'Integracija sistema', - description: 'Povezivanje i optimizacija poslovnih sistema' - }, - customDevelopment: { - title: 'Individualni razvoj', - description: 'Izrada prilagođenih softverskih rešenja' - } - }, - // Languages - languages: { - english: 'Engleski', - serbian: 'Srpski', - german: 'Nemački', - french: 'Francuski', - spanish: 'Španski', - russian: 'Ruski' - } -} as const; -// Type for type safety -export type HeroTranslations = typeof hero; diff --git a/src/i18n/locales-old/sr/pages/about/index.ts b/src/i18n/locales-old/sr/pages/about/index.ts deleted file mode 100644 index ffe2b83..0000000 --- a/src/i18n/locales-old/sr/pages/about/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { hero } from './hero'; -import { journey } from './journey'; -import { schema } from './schema'; -import { skillbar } from './skillbar'; -import { skillgroup } from './skillgroup'; -import { skills } from './skills'; -import { workflow } from './workflow'; -export const about = { - seo: { - title: 'O Meni - Damjan Savić | Fullstack Programer & AI Specijalista', - description: 'Saznajte više o Damjanu Saviću - AI & Automation Specialist sa fokusom na Voice AI, autonomne agente i automatizaciju procesa iz Kelna, Nemačka.' - }, - hero, - journey, - schema, - skillbar, - skillgroup, - skills, - workflow -} as const; -// Typen exportieren -export type { HeroTranslations } from './hero'; -export type { JourneyTranslations } from './journey'; -export type { SchemaTranslations } from './schema'; -export type { SkillBarTranslations } from './skillbar'; -export type { SkillGroupTranslations } from './skillgroup'; -export type { SkillsTranslations } from './skills'; -export type { WorkflowTranslations } from './workflow'; diff --git a/src/i18n/locales-old/sr/pages/about/journey.ts b/src/i18n/locales-old/sr/pages/about/journey.ts deleted file mode 100644 index ae17030..0000000 --- a/src/i18n/locales-old/sr/pages/about/journey.ts +++ /dev/null @@ -1,96 +0,0 @@ - -export const journey = { - // Header - title: 'Profesionalni razvoj', - subtitle: 'Od digitalnih medija do poslovnih rešenja', - // Education Section - education: { - title: 'Obrazovanje', - degrees: { - masters: { - degree: 'M.A. Razvoj softvera', - university: 'Middlesex University, London', - period: '2020 - 2022' - }, - bachelors: { - degree: 'B.A. Cross-Media produkcija', - university: 'Middlesex University, London', - period: '2018 - 2020' - } - } - }, - // Languages Section - languages: { - title: 'Jezici', - items: { - english: { - name: 'Engleski', - level: 'C2' - }, - serbian: { - name: 'Srpski', - level: 'C2' - }, - german: { - name: 'Nemački', - level: 'C2' - }, - french: { - name: 'Francuski', - level: 'B2' - }, - spanish: { - name: 'Španski', - level: 'B2' - }, - russian: { - name: 'Ruski', - level: 'A1' - } - } - }, - // Work History - work: { - positions: [ - { - period: '08/2023 - Danas', - company: 'Ritter Digital GmbH', - title: 'Digital Solutions Consultant', - location: 'Oberhausen', - highlights: [ - 'ERP konsalting i implementacija (JTL WaWi)', - 'Automatizacija procesa i Full-Stack razvoj', - 'RFID tehnologija i automatizacija', - 'Generisanje i upravljanje Lead-ovima', - 'Content menadžment podržan AI tehnologijom' - ] - }, - { - period: '02/2023 - 08/2023', - company: 'Joyce & Girls Co AG', - title: 'ERP Integration Specialist', - location: 'Köln', - highlights: [ - 'Kompleksna integracija sistema (Apparel Magic, TradeByte)', - 'Administracija servera i automatizacija', - 'Razvoj baza podataka i API-ja', - 'Digitalni marketing i analiza kampanja' - ] - }, - { - period: '08/2022 - 01/2023', - company: 'Magnarius', - title: 'RPA Developer & E-Commerce Manager', - location: 'Bergisch Gladbach', - highlights: [ - 'Shopware 6 razvoj i JTL integracija', - 'Google Ads automatizacija', - 'CMS menadžment i optimizacija', - 'Implementacija SEO strategije' - ] - } - ] - } -} as const; -// Tip za tipsku sigurnost -export type JourneyTranslations = typeof journey; diff --git a/src/i18n/locales-old/sr/pages/about/schema.ts b/src/i18n/locales-old/sr/pages/about/schema.ts deleted file mode 100644 index 25446c7..0000000 --- a/src/i18n/locales-old/sr/pages/about/schema.ts +++ /dev/null @@ -1,31 +0,0 @@ -export const schema = { - page: { - name: 'O Damjanu Saviću', - description: 'Saznajte više o Damjanu Saviću, sertifikovanom JTL ekspertu sa velikim iskustvom u e-trgovini i sistemima za upravljanje robom.' - }, - person: { - jobTitle: 'JTL integracioni ekspert', - description: 'Sa bogatim iskustvom u integraciji i optimizaciji e-commerce sistema, pomažem kompanijama u digitalnoj transformaciji njihovih poslovnih procesa.', - languages: { - english: 'Engleski', - serbian: 'Srpski', - german: 'Nemački', - french: 'Francuski', - spanish: 'Španski', - russian: 'Ruski' - }, - skills: { - python: 'Python', - googleAds: 'Google Ads', - metaAds: 'Meta Ads', - shopware: 'Shopware', - shopify: 'Shopify', - wooCommerce: 'WooCommerce', - jtlWawi: 'JTL WAWI', - serverAdmin: 'Administracija servera', - airflow: 'AirFlow' - } - } -} as const; -// Tip za tipsku sigurnost -export type SchemaTranslations = typeof schema; diff --git a/src/i18n/locales-old/sr/pages/about/skillbar.ts b/src/i18n/locales-old/sr/pages/about/skillbar.ts deleted file mode 100644 index 4c215f8..0000000 --- a/src/i18n/locales-old/sr/pages/about/skillbar.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const skillbar = { - // Accessibility labels - ariaLabel: { - skillLevel: 'Nivo veštine', - progressBar: 'Indikator napretka' - }, - // Screen reader text - screenReader: { - progress: '{{level}} procenata napretka za {{skill}}' - } -} as const; -// Tip za tipsku sigurnost -export type SkillBarTranslations = typeof skillbar; diff --git a/src/i18n/locales-old/sr/pages/about/skillgroup.ts b/src/i18n/locales-old/sr/pages/about/skillgroup.ts deleted file mode 100644 index 04d5f49..0000000 --- a/src/i18n/locales-old/sr/pages/about/skillgroup.ts +++ /dev/null @@ -1,63 +0,0 @@ -export const skillgroup = { - // Kategorije - categories: { - development: 'Razvoj', - ecommerce: 'E-Commerce', - marketing: 'Marketing', - automation: 'Automatizacija', - languages: 'Programski jezici', - databases: 'Baze podataka' - }, - // Veštine po kategorijama - skills: { - development: { - frontend: 'Frontend razvoj', - backend: 'Backend razvoj', - fullstack: 'Full-Stack razvoj', - api: 'API razvoj', - testing: 'Testiranje softvera' - }, - ecommerce: { - jtl: 'JTL WaWi', - shopware: 'Shopware', - shopify: 'Shopify', - woocommerce: 'WooCommerce', - magento: 'Magento' - }, - marketing: { - seo: 'Optimizacija za pretraživače', - sea: 'Marketing na pretraživačima', - analytics: 'Web analitika', - googleAds: 'Google Ads', - metaAds: 'Meta Ads' - }, - automation: { - rpa: 'Robotska automatizacija procesa', - workflow: 'Automatizacija radnih tokova', - cicd: 'CI/CD', - testing: 'Automatizacija testiranja', - deployment: 'Automatizacija razvoja' - }, - languages: { - python: 'Python', - javascript: 'JavaScript', - typescript: 'TypeScript', - php: 'PHP', - sql: 'SQL' - }, - databases: { - mysql: 'MySQL', - postgresql: 'PostgreSQL', - mongodb: 'MongoDB', - redis: 'Redis', - elasticsearch: 'Elasticsearch' - } - }, - // Pristupačnost - ariaLabels: { - skillGroup: 'Grupa veština', - skillList: 'Lista veština u ovoj kategoriji' - } -} as const; -// Tip za tipsku sigurnost -export type SkillGroupTranslations = typeof skillgroup; diff --git a/src/i18n/locales-old/sr/pages/about/skills.ts b/src/i18n/locales-old/sr/pages/about/skills.ts deleted file mode 100644 index bab7c9e..0000000 --- a/src/i18n/locales-old/sr/pages/about/skills.ts +++ /dev/null @@ -1,46 +0,0 @@ -// sr/pages/about/skills.ts -export const skills = { - title: 'Veštine', - skillGroups: [ - { - category: 'Razvoj', - items: [ - { name: 'Python', level: 90 }, - { name: 'Google Ads', level: 85 }, - { name: 'Meta Ads', level: 85 } - ] - }, - { - category: 'E-Commerce', - items: [ - { name: 'Shopware', level: 85 }, - { name: 'Shopify', level: 85 }, - { name: 'WooCommerce', level: 85 } - ] - }, - { - category: 'Administracija sistema', - items: [ - { name: 'JTL WAWI', level: 85 }, - { name: 'Server', level: 75 }, - { name: 'AirFlow', level: 60 } - ] - } - ], - ui: { - percentage: 'procenat', - levelLabel: 'nivo', - skillLevel: '{{level}}% ovladanosti za {{skill}}' - }, - aria: { - skillGroup: 'Grupa veština za {{category}}', - skillBar: 'Indikator napretka za {{skill}}', - skillIcon: 'Ikona za {{category}}', - selectSkill: 'Izaberi veštinu' - }, - screenReader: { - skillProgress: '{{skill}} sa nivoom od {{level}} procenata' - } -} as const; - -export type SkillsTranslations = typeof skills; diff --git a/src/i18n/locales-old/sr/pages/about/workflow.ts b/src/i18n/locales-old/sr/pages/about/workflow.ts deleted file mode 100644 index 78aaebc..0000000 --- a/src/i18n/locales-old/sr/pages/about/workflow.ts +++ /dev/null @@ -1,44 +0,0 @@ -export const workflow = { - // Naslov stranice - title: 'MOJ WORKFLOW', - description: 'Sistematski pristup razvoju softvera kroz definisane korake', - // Workflow koraci - steps: [ - { - number: '01', - title: 'ANALIZA ZAHTEVA' - }, - { - number: '02', - title: 'PROVERA ROKOVA I OGRANIČENJA' - }, - { - number: '03', - title: 'POSTAVLJANJE RAZVOJNOG OKRUŽENJA' - }, - { - number: '04', - title: 'PROGRAMIRANJE' - }, - { - number: '05', - title: 'TESTIRANJE REZULTATA' - }, - { - number: '06', - title: 'PODRŠKA I SKALIRANJE KODA' - } - ], - // Aria oznake za pristupačnost - aria: { - workflowSection: 'Workflow proces', - stepNumber: 'Korak {{number}}', - stepDescription: 'Workflow korak: {{title}}' - }, - // Tekstovi za čitače ekrana - screenReader: { - stepProgress: 'Korak {{number}} od {{total}}: {{title}}' - } -} as const; -// Tip za tipsku sigurnost -export type WorkflowTranslations = typeof workflow; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/pages/contact/contactform.ts b/src/i18n/locales-old/sr/pages/contact/contactform.ts deleted file mode 100644 index 9da71b0..0000000 --- a/src/i18n/locales-old/sr/pages/contact/contactform.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/sr/pages/contact/contactform.ts -export const contactform = { - // Zaglavlje formulara - title: 'Kontaktirajte me', - description: 'Imate pitanja ili želite da sarađujemo? Pošaljite mi poruku.', - // Polja formulara - name: { - label: 'Ime', - placeholder: 'Vaše puno ime' - }, - email: { - label: 'E-mail', - placeholder: 'vasa.adresa@primer.com' - }, - message: { - label: 'Poruka', - placeholder: 'Vaša poruka za mene...' - }, - // Dugme - submit: 'Pošalji poruku', - // Status poruke - successMessage: 'Hvala vam na poruci! Javiću vam se u najkraćem mogućem roku.', - errorMessage: 'Izvinite, došlo je do greške prilikom slanja vaše poruke. Molimo pokušajte ponovo kasnije.', - // Poruke o greškama - errors: { - nameRequired: 'Molimo unesite vaše ime', - emailRequired: 'Molimo unesite vašu e-mail adresu', - emailInvalid: 'Molimo unesite ispravnu e-mail adresu', - messageRequired: 'Molimo unesite poruku' - }, - // Aria oznake - aria: { - form: 'Kontakt formular', - submitting: 'Slanje formulara', - successAlert: 'Poruka o uspehu', - errorAlert: 'Poruka o grešci' - } -} as const; - -// Tip za tipsku sigurnost -export type ContactFormTranslations = typeof contactform; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/pages/contact/contactinfo.ts b/src/i18n/locales-old/sr/pages/contact/contactinfo.ts deleted file mode 100644 index 26fb95b..0000000 --- a/src/i18n/locales-old/sr/pages/contact/contactinfo.ts +++ /dev/null @@ -1,27 +0,0 @@ -// src/i18n/locales/sr/pages/contact/contactinfo.ts -export const contactinfo = { - // Zaglavlje - title: 'Kontakt informacije', - description: 'Možete me kontaktirati na sledeće načine', - // Oznake kontakt metoda - addressLabel: 'Lokacija kancelarije', - phoneLabel: 'Telefon', - emailLabel: 'E-mail', - // Kontakt informacije - address: 'Rotdornallee, Köln', - phone: '+49 175 695 0979', - email: 'info@damjan-savic.com', - // Dodatne informacije - availabilityNote: 'Radno vreme: ponedeljak - petak, 9:00 - 17:00', - // Aria oznake - aria: { - contactCard: 'Kartica kontakt informacija', - addressLink: 'Otvori lokaciju u Google Maps', - phoneLink: 'Pozovi', - emailLink: 'Pošalji e-mail', - externalLink: 'Otvara se u novom tabu' - } -} as const; - -// Tip za tipsku sigurnost -export type ContactInfoTranslations = typeof contactinfo; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/pages/contact/index.ts b/src/i18n/locales-old/sr/pages/contact/index.ts deleted file mode 100644 index 0b52aa2..0000000 --- a/src/i18n/locales-old/sr/pages/contact/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -// src/i18n/locales/sr/pages/contact/index.ts -export const contact = { - breadcrumb: "KONTAKT", - hero: { - title: "Radimo Zajedno", - subtitle: "Imate projekat na umu? Hajde da razgovaramo o tome kako vam možemo pomoći da ostvarite svoje ciljeve." - }, - contactInfo: { - title: "Kontakt informacije", - description: "Možete me kontaktirati na sledeće načine", - address: { - label: "Lokacija kancelarije", - value: "Rotdornalle, Köln" - }, - phone: { - label: "Telefon", - value: "+49 175 695 0979" - }, - email: { - label: "E-mail", - value: "info@damjan-savic.com" - }, - availabilityNote: "Radno vreme: ponedeljak - petak, 9:00 - 17:00", - aria: { - contactCard: "Kartica kontakt informacija", - addressLink: "Otvori lokaciju u Google Maps", - phoneLink: "Pozovi", - emailLink: "Pošalji e-mail", - externalLink: "Otvara se u novom tabu" - } - }, - contactForm: { - title: "Kontaktirajte me", - description: "Imate pitanja ili želite da sarađujemo? Pošaljite mi poruku.", - name: { - label: "Ime", - placeholder: "Vaše puno ime" - }, - email: { - label: "E-mail", - placeholder: "vasa.adresa@primer.com" - }, - message: { - label: "Poruka", - placeholder: "Vaša poruka za mene..." - }, - submit: "Pošalji poruku", - successMessage: "Hvala vam na poruci! Javiću vam se u najkraćem mogućem roku.", - errorMessage: "Izvinite, došlo je do greške prilikom slanja vaše poruke. Molimo pokušajte ponovo kasnije.", - errors: { - nameRequired: "Molimo unesite vaše ime", - emailRequired: "Molimo unesite vašu e-mail adresu", - emailInvalid: "Molimo unesite ispravnu e-mail adresu", - messageRequired: "Molimo unesite poruku" - }, - aria: { - form: "Kontakt formular", - submitting: "Slanje formulara", - successAlert: "Poruka o uspehu", - errorAlert: "Poruka o grešci" - } - } -} as const; - -export type ContactTranslations = typeof contact; - -export default { - pages: { - contact: contact - } -}; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/pages/dashboard.ts b/src/i18n/locales-old/sr/pages/dashboard.ts deleted file mode 100644 index 4061c1f..0000000 --- a/src/i18n/locales-old/sr/pages/dashboard.ts +++ /dev/null @@ -1,76 +0,0 @@ -// src/i18n/locales/sr/pages/dashboard.ts -export const dashboard = { - // SEO - seo: { - title: 'Analitički dashboard', - description: 'Dashboard za analizu veb sajta' - }, - // Glavni naslovi - header: { - title: 'Analitički dashboard', - activeUsers: 'aktivnih korisnika' - }, - // Kartice sa metrikama - metrics: { - pageViews: { - title: 'Pregledi stranica', - perMinute: 'po minutu' - }, - uniqueVisitors: { - title: 'Jedinstveni posetioci', - currentlyActive: 'trenutno aktivni' - }, - conversions: { - title: 'Konverzije', - rate: 'Stopa konverzije' - }, - timeOnSite: { - title: 'Prosečno vreme posete', - bounceRate: 'Stopa napuštanja' - } - }, - // Sekcija najpopularnijih stranica - topPages: { - title: 'Najpopularnije stranice', - columns: { - path: 'Putanja', - views: 'Pregledi', - change: 'Promena' - } - }, - // Sekcija za praćenje događaja - events: { - title: 'Praćenje događaja', - types: { - contactForm: 'Slanje kontakt forme', - portfolioView: 'Pregled portfolija', - cvDownload: 'Preuzimanje biografije', - blogRead: 'Čitanje bloga' - } - }, - // Status poruke - status: { - loading: 'Učitavanje dashboard-a...', - error: 'Greška pri učitavanju podataka', - notAuthenticated: 'Molimo prijavite se' - }, - // Ostalo - misc: { - viewMore: 'Prikaži više', - refresh: 'Osveži', - period: { - today: 'Danas', - yesterday: 'Juče', - last7Days: 'Poslednjih 7 dana', - last30Days: 'Poslednjih 30 dana', - thisMonth: 'Ovaj mesec', - lastMonth: 'Prošli mesec' - } - }, - // Trendovi i promene - trends: { - increase: 'Porast', - decrease: 'Pad', - noChange: 'Bez promene' - } -}; diff --git a/src/i18n/locales-old/sr/pages/home/about.ts b/src/i18n/locales-old/sr/pages/home/about.ts deleted file mode 100644 index a91fe1a..0000000 --- a/src/i18n/locales-old/sr/pages/home/about.ts +++ /dev/null @@ -1,13 +0,0 @@ -// src/i18n/locales/sr/pages/home/about.ts -export const about = { - title: 'O Meni', - content: 'Као старији програмер пуног стека и консултант за дигитална решења, специјализован сам за софтвер за предузећа, облак архитектуру и интеграцију вештачке интелигенције. Са седиштем у Келну, Немачка, помажем компанијама широм Европе да оптимизују своје пословне процесе кроз модерна технолошка решења. Моја експертиза обухвата развој скалабилних система, имплементацију облак архитектуре, као и интеграцију најновијих AI технологија. У компанији Ritter Digital GmbH радим на JTL интеграцијама и развијам прилагођена решења за дигиталну трансформацију. Један од кључних пројеката је била интеграција Breuninger ERP система са Apparel Magic платформом преко TB.One решења. Мој циљ је да омогућим компанијама да постану ефикасније и конкурентније кроз иновативна софтверска решења.', - image: { - alt: 'Damjan Savić (Дамјан Савић) - Старији програмер пуног стека и консултант за дигитална решења из Келна, Немачка' - }, - buttons: { - learnMore: 'Сазнај више', - downloadCV: 'Преузми CV' - } -} as const; -export type AboutTranslations = typeof about; diff --git a/src/i18n/locales-old/sr/pages/home/experience.ts b/src/i18n/locales-old/sr/pages/home/experience.ts deleted file mode 100644 index 71cf2a2..0000000 --- a/src/i18n/locales-old/sr/pages/home/experience.ts +++ /dev/null @@ -1,86 +0,0 @@ -// src/i18n/locales/sr/pages/home/experience.ts -export const experience = { - title: 'Radno iskustvo', - navigation: { - prev: '←', - next: '→' - }, - positions: [ - { - role: 'Specijalist za automatizaciju procesa', - company: 'Everlast Consulting GmbH', - period: '12/2024 - DANAS', - highlights: [ - 'Razvoj AI agenata sa n8n i Zapier', - 'Izrada web scraping rešenja', - 'Migracija sa Power Automate na n8n' - ] - }, - { - role: 'Consultant Digital Solutions', - company: 'Ritter Digital GmbH', - period: '08/2023 - 11/2024', - highlights: [ - 'Backend servisi na dedikovanim serverima', - 'AI integracija preko Power Automate', - 'RFID/IoT rešenja sa Zebra hardverom' - ] - }, - { - role: 'ERP integracioni specijalista i E-Commerce developer', - company: 'Joyce & Girls', - period: '01/2023 - 08/2023', - highlights: [ - 'ApparelMagic i TradeByte integracija', - 'MariaDB middleware razvoj', - 'Windows Server administracija', - 'Shopify optimizacija' - ] - }, - { - role: 'RPA Developer & E-Commerce Manager', - company: 'C&S Marketing', - period: '08/2022 - 01/2023', - highlights: [ - 'Shopware 6 i JTL integracija', - 'Python automatizacija', - 'Google Ads optimizacija', - 'CMS menadžment' - ] - }, - { - role: 'E-Commerce Developer', - company: 'Brands Club GmbH', - period: '08/2021 - 07/2022', - highlights: [ - 'Shopify i JTL integracija', - 'Server administracija', - 'Produkcija sadržaja', - 'Marketing automatizacija' - ] - }, - { - role: 'E-Commerce Developer', - company: 'Feine Uhren Eupen', - period: '01/2021 - 08/2021', - highlights: [ - 'Shopware 5 razvoj', - 'Fotografija proizvoda', - 'Prodaja u segmentu luksuznih satova', - 'E-Commerce menadžment' - ] - }, - { - role: 'Online Marketing Manager', - company: 'Ufer8, Ambis, Teatro & Die Halle Tor 2', - period: '01/2018 - 12/2020', - highlights: [ - 'Social Media sadržaj', - 'Event marketing', - 'Organizacija događaja', - 'Marketing automatizacija' - ] - } - ] -} as const; -export type ExperienceTranslations = typeof experience; diff --git a/src/i18n/locales-old/sr/pages/home/expertise.ts b/src/i18n/locales-old/sr/pages/home/expertise.ts deleted file mode 100644 index ec44242..0000000 --- a/src/i18n/locales-old/sr/pages/home/expertise.ts +++ /dev/null @@ -1,27 +0,0 @@ -// src/i18n/locales/sr/pages/home/expertise.ts -export const expertise = { - title: 'Oblasti ekspertize', - areas: [ - { - title: 'ERP Integracija', - description: 'Ekspert za JTL-Wawi implementaciju, konfiguraciju i optimizaciju. Specijalizovan za sisteme za upravljanje robom i POS integraciju.', - skills: ['JTL-Wawi', 'JTL-WMS', 'JTL-POS', 'Apparel Magic'] - }, - { - title: 'Razvoj', - description: 'Full-Stack razvoj sa fokusom na Python automatizaciju, React frontende i dizajn baza podataka.', - skills: ['Python', 'React/Next.js', 'MariaDB', 'Docker'] - }, - { - title: 'E-Commerce', - description: 'Obimno iskustvo sa različitim e-commerce platformama i integracijama sa marketplace-ima.', - skills: ['Shopify', 'Shopware', 'WooCommerce', 'API Integration'] - }, - { - title: 'Digitalni Marketing', - description: 'Strateški pristup u digitalnom marketingu sa fokusom na automatizaciju i analitiku.', - skills: ['Google Ads', 'Meta Ads', 'SEO', 'Analytics'] - } - ] -} as const; -export type ExpertiseTranslations = typeof expertise; diff --git a/src/i18n/locales-old/sr/pages/home/hero.ts b/src/i18n/locales-old/sr/pages/home/hero.ts deleted file mode 100644 index 00e9a3e..0000000 --- a/src/i18n/locales-old/sr/pages/home/hero.ts +++ /dev/null @@ -1,31 +0,0 @@ -// src/i18n/locales/sr/pages/home/hero.ts -export const hero = { - title: 'AI & AUTOMATION SPECIALIST', - name: 'DAMJAN SAVIĆ', - subtitle: 'AI AGENTI | VOICE AI | AUTOMATIZACIJA PROCESA', - description: 'Razvoj AI agenata i rešenja za automatizaciju. Od voice AI platformi do autonomnih web agenata.', - currentRole: 'Trenutno @ Everlast Consulting GmbH', - cta: 'KONTAKTIRAJTE ME', - image: { - alt: 'Damjan Savić (Дамјан Савић) - AI & Automation Specialist | AI Agenti, Voice AI & Automatizacija' - }, - social: { - getInTouch: 'Kontaktirajte me', - linkedin: { - title: 'Posetite moj LinkedIn profil' - }, - github: { - title: 'Posetite moj GitHub profil' - }, - email: { - title: 'Pošaljite mi e-mail' - } - }, - navigation: { - experience: 'ISKUSTVO', - skills: 'VEŠTINE', - projects: 'PROJEKTI', - about: 'O MENI' - } -} as const; -export type HeroTranslations = typeof hero; diff --git a/src/i18n/locales-old/sr/pages/home/index.ts b/src/i18n/locales-old/sr/pages/home/index.ts deleted file mode 100644 index 21f729d..0000000 --- a/src/i18n/locales-old/sr/pages/home/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -// 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 -}; diff --git a/src/i18n/locales-old/sr/pages/home/projects.ts b/src/i18n/locales-old/sr/pages/home/projects.ts deleted file mode 100644 index 65546d3..0000000 --- a/src/i18n/locales-old/sr/pages/home/projects.ts +++ /dev/null @@ -1,10 +0,0 @@ -// src/i18n/locales/sr/pages/home/projects.ts -export const projects = { - title: 'Portfolio', - viewAll: 'Svi projekti →', - loading: 'Učitavanje projekata...', - error: { - loading: 'Greška pri učitavanju projekata' - } -} as const; -export type ProjectsTranslations = typeof projects; diff --git a/src/i18n/locales-old/sr/pages/home/skills.ts b/src/i18n/locales-old/sr/pages/home/skills.ts deleted file mode 100644 index bab23ae..0000000 --- a/src/i18n/locales-old/sr/pages/home/skills.ts +++ /dev/null @@ -1,41 +0,0 @@ -// src/i18n/locales/sr/pages/home/skills.ts -export const skills = { - title: 'Veštine', - 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, API-ji, 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, Dedicated Servers' - } - ], - aria: { - skillLevel: 'Nivo veštine', - selectSkill: 'Izaberite veštinu' - } -} as const; -export type SkillsTranslations = typeof skills; diff --git a/src/i18n/locales-old/sr/pages/login.ts b/src/i18n/locales-old/sr/pages/login.ts deleted file mode 100644 index 708fed2..0000000 --- a/src/i18n/locales-old/sr/pages/login.ts +++ /dev/null @@ -1,54 +0,0 @@ -// src/i18n/locales/sr/pages/login.ts -export const login = { - // SEO - seo: { - title: 'Prijava', - description: 'Prijavite se za pristup dashboard-u' - }, - // Glavni naslov - header: { - title: 'Prijava na dashboard' - }, - // Formular - form: { - // Polja - email: { - label: 'E-mail adresa', - placeholder: 'vas.email@primer.com' - }, - password: { - label: 'Lozinka', - placeholder: 'Vaša lozinka' - }, - // Dugmad - submit: { - default: 'Prijavi se', - loading: 'Prijava u toku...' - }, - // Poruke o greškama - errors: { - default: 'Došlo je do greške', - invalidCredentials: 'Neispravni podaci za prijavu', - emailRequired: 'Molimo unesite vašu e-mail adresu', - passwordRequired: 'Molimo unesite vašu lozinku', - emailInvalid: 'Molimo unesite važeću e-mail adresu' - } - }, - // Linkovi i pomoć - help: { - forgotPassword: 'Zaboravili ste lozinku?', - needHelp: 'Potrebna vam je pomoć?', - contactSupport: 'Kontaktirajte podršku' - }, - // Status poruke - status: { - authenticating: 'Autentifikacija...', - success: 'Uspešna prijava', - redirecting: 'Preusmeravanje na dashboard...' - }, - // Bezbednosna obaveštenja - security: { - secureConnection: 'Bezbedna veza', - privacyNote: 'Vaši podaci se prenose u šifrovanom obliku' - } -}; diff --git a/src/i18n/locales-old/sr/pages/notfound.ts b/src/i18n/locales-old/sr/pages/notfound.ts deleted file mode 100644 index 03f50ac..0000000 --- a/src/i18n/locales-old/sr/pages/notfound.ts +++ /dev/null @@ -1,19 +0,0 @@ -// src/i18n/locales/sr/pages/notfound.ts -export const notfound = { - // SEO - seo: { - title: '404 - Stranica nije pronađena', - description: 'Tražena stranica ne postoji.' - }, - // Glavni sadržaj - content: { - errorCode: '404', - title: 'Stranica nije pronađena', - description: 'Tražena stranica ne postoji ili je premeštena.', - }, - // Akciona dugmad - actions: { - goBack: 'Nazad', - homePage: 'Početna' - } -}; diff --git a/src/i18n/locales-old/sr/pages/portfolio.ts b/src/i18n/locales-old/sr/pages/portfolio.ts deleted file mode 100644 index 7e9d2af..0000000 --- a/src/i18n/locales-old/sr/pages/portfolio.ts +++ /dev/null @@ -1,117 +0,0 @@ -// src/i18n/locales/sr/pages/portfolio.ts -export const portfolio = { - // SEO i meta informacije - seo: { - title: 'Portfolio - Damjan Savić', - description: 'Otkrijte moje projekte u oblasti JTL integracije, e-commerce-a i digitalne transformacije.' - }, - // Glavna stranica - main: { - title: 'Portfolio', - loading: 'Učitavanje projekata...', - error: 'Greška pri učitavanju projekata', - noProjects: { - title: 'Nije pronađen nijedan projekat', - description: 'Trenutno nema dostupnih projekata. Posetite nas ponovo kasnije.' - } - }, - // Kartice projekata - projectCard: { - date: 'Datum', - technologies: 'Tehnologije', - moreCount: 'još', // za '+X još' - readMore: 'Saznaj više' - }, - // Detalji projekta - project: { - loading: 'Učitavanje projekta...', - backToPortfolio: 'Nazad na portfolio', - notFound: { - title: 'Projekat nije pronađen', - description: 'Traženi projekat nije pronađen.' - }, - navigation: { - back: 'Nazad na portfolio', - projectDetails: 'DETALJI PROJEKTA' - }, - metadata: { - date: 'Datum', - client: 'Klijent', - duration: 'Trajanje', - repository: 'Repozitorijum', - documentation: 'Dokumentacija', - technologies: 'Tehnologije', - live: 'Uživo' - }, - sections: { - overview: 'Pregled', - challenge: 'Izazov', - solution: 'Rešenje', - results: 'Rezultati', - systemArchitecture: 'Sistemska arhitektura', - implementation: 'Implementacija', - technologies: 'Korišćene tehnologije' - } - }, - // Kategorije i filteri - categories: { - all: 'Sve', - 'Data Science': 'Data Science', - 'AI Development': 'AI razvoj', - 'Integration': 'Integracija', - 'Full-Stack Development': 'Full-Stack razvoj', - 'Data Processing': 'Obrada podataka', - 'Content Production': 'Produkcija sadržaja', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automatizacija' - }, - // Specifični projekti - projects: { - 'ai-data-reader': { - title: 'AI održavanje podataka o proizvodima iz PDF fajlova', - description: 'Razvoj automatizovanog sistema za ekstrakciju i strukturiranje podataka o proizvodima iz PDF dokumenata' - }, - 'bi-vision': { - title: 'AI video za BI softver', - description: 'Razvoj video objašnjenja zasnovanih na AI za Business Intelligence dashboard-e' - }, - 'business-intelligence-ai': { - title: 'AI za Business Intelligence', - description: 'Integracija AI modela u Business Intelligence sisteme za optimizaciju procesa' - }, - 'claude-personal-assistant': { - title: 'AI lični asistent sa Claude AI', - description: 'Razvoj personalizovanog AI asistenta za profesionalnu e-mail komunikaciju' - }, - 'e-commerce-integration': { - title: 'Integracija sa TradeByte-om', - description: 'Integracija Shopify prodavnice sa JTL-WaWi za optimizovano upravljanje zalihama' - }, - 'jtl-integration-project': { - title: 'JTL integracioni referentni projekat', - description: 'Kompletan sistem za upravljanje skladištem u Krefeld-u baziran na JTL-u' - }, - 'local-llm-training': { - title: 'Treniranje lokalnih AI modela', - description: 'Razvoj pipeline-a za treniranje i fino podešavanje lokalnih AI modela' - }, - 'processautomation': { - title: 'Automatizacija sa Python-om', - description: 'Razvoj automatizacionih rešenja za poslovne procese' - }, - 'rfid-automation': { - title: 'RFID automatizacija', - description: 'Razvoj automatizovanog sistema za kreiranje i štampanje RFID etiketa' - }, - 'timetracking-software': { - title: 'Digitalna evidencija radnog vremena', - description: 'Razvoj modernog rešenja za evidenciju radnog vremena sa Next.js, Flask i MSSQL' - } - }, - // Status poruke - status: { - loading: 'Učitavanje...', - error: 'Došlo je do greške', - success: 'Uspešno učitano' - } -}; diff --git a/src/i18n/locales-old/sr/pages/privacy.ts b/src/i18n/locales-old/sr/pages/privacy.ts deleted file mode 100644 index c16e3da..0000000 --- a/src/i18n/locales-old/sr/pages/privacy.ts +++ /dev/null @@ -1,96 +0,0 @@ -// src/i18n/locales/sr/pages/privacy.ts -export const privacy = { - // SEO i šema - seo: { - title: 'Politika privatnosti', - description: 'Politika privatnosti za portfolio sajt Damjana Savića' - }, - schema: { - name: 'Politika privatnosti', - description: 'Politika privatnosti za portfolio sajt Damjana Savića' - }, - // Glavni sadržaj - content: { - title: 'Politika privatnosti', - lastUpdated: 'Poslednje ažuriranje: 10. mart 2024.', - // Navigacija - breadcrumbs: { - currentTitle: 'Politika privatnosti' - }, - // Sekcije - sections: { - introduction: { - title: '1. Uvod', - content: 'Ova politika privatnosti objašnjava kako prikupljamo, koristimo i štitimo vaše lične podatke prilikom korišćenja našeg sajta.' - }, - dataCollection: { - title: '2. Prikupljanje podataka', - providedInfo: { - title: '2.1 Informacije koje vi dostavljate', - intro: 'Prilikom korišćenja našeg kontakt formulara, prikupljamo:', - items: [ - 'Ime', - 'E-mail adresu', - 'Sadržaj poruke' - ] - }, - automaticInfo: { - title: '2.2 Automatski prikupljene informacije', - intro: 'Automatski prikupljamo:', - items: [ - 'IP adresu', - 'Tip pretraživača', - 'Informacije o uređaju', - 'Posećene stranice', - 'Vreme provedeno na sajtu' - ] - } - }, - dataUsage: { - title: '3. Korišćenje vaših podataka', - intro: 'Vaše podatke koristimo za:', - items: [ - 'Odgovaranje na vaše upite', - 'Unapređenje našeg sajta', - 'Analizu obrazaca korišćenja', - 'Prevenciju prevara' - ] - }, - cookies: { - title: '4. Kolačići', - intro: 'Kolačiće koristimo za:', - items: [ - 'Čuvanje vaših podešavanja', - 'Analizu saobraćaja na sajtu', - 'Razumevanje ponašanja korisnika' - ] - }, - security: { - title: '5. Bezbednost podataka', - intro: 'Implementiramo odgovarajuće bezbednosne mere za zaštitu vaših ličnih podataka, uključujući:', - items: [ - 'Enkripciju prenosa podataka', - 'Redovne bezbednosne procene', - 'Kontrole pristupa', - 'Bezbedno skladištenje podataka' - ] - }, - rights: { - title: '6. Vaša prava', - intro: 'Imate pravo na:', - items: [ - 'Pristup vašim ličnim podacima', - 'Ispravku podataka', - 'Brisanje podataka', - 'Prigovor na obradu podataka', - 'Prenosivost podataka' - ] - }, - contact: { - title: '7. Kontakt informacije', - intro: 'Za pitanja u vezi sa privatnošću kontaktirajte nas na:', - email: 'E-mail: privacy@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/sr/pages/terms.ts b/src/i18n/locales-old/sr/pages/terms.ts deleted file mode 100644 index 3b9794e..0000000 --- a/src/i18n/locales-old/sr/pages/terms.ts +++ /dev/null @@ -1,59 +0,0 @@ -// src/i18n/locales/sr/pages/terms.ts -export const terms = { - // SEO i šema - seo: { - title: 'Uslovi korišćenja', - description: 'Uslovi korišćenja za portfolio sajt Damjana Savića' - }, - schema: { - name: 'Uslovi korišćenja', - description: 'Uslovi korišćenja za portfolio sajt Damjana Savića' - }, - // Glavni sadržaj - content: { - title: 'Uslovi korišćenja', - lastUpdated: 'Poslednje ažuriranje: 10. mart 2024.', - // Navigacija - breadcrumbs: { - currentTitle: 'Uslovi korišćenja' - }, - // Sekcije - sections: { - agreement: { - title: '1. Prihvatanje uslova', - content: 'Pristupom našem sajtu prihvatate da ste obavezani ovim Uslovima korišćenja i da ćete se pridržavati svih važećih zakona i propisa.' - }, - intellectualProperty: { - title: '2. Prava intelektualne svojine', - content: 'Sav sadržaj ovog sajta, uključujući ali ne ograničavajući se na tekstove, grafike, logotipe, slike i softver, vlasništvo je Damjana Savića i zaštićen je zakonima o intelektualnoj svojini.' - }, - userResponsibilities: { - title: '3. Odgovornosti korisnika', - intro: 'Korišćenjem našeg sajta pristajete da:', - items: [ - 'Pružate tačne informacije', - 'Koristite sajt legalno i etički', - 'Ne pokušavate neovlašćeni pristup', - 'Ne ometate rad sajta' - ] - }, - liability: { - title: '4. Ograničenje odgovornosti', - content: 'Ne snosimo odgovornost za indirektne, slučajne, posebne, posledične ili kaznene štete koje proizilaze iz vašeg korišćenja ili nemogućnosti korišćenja sajta.' - }, - changes: { - title: '5. Izmene uslova', - content: 'Zadržavamo pravo da izmenimo ove uslove u bilo kom trenutku. O značajnim izmenama ćemo obavestiti korisnike objavljivanjem novih Uslova korišćenja na ovoj stranici.' - }, - governingLaw: { - title: '6. Merodavno pravo', - content: 'Ovi uslovi podležu zakonima Savezne Republike Nemačke i tumače se u skladu sa njima, bez obzira na sukob pravnih normi.' - }, - contact: { - title: '7. Kontakt informacije', - intro: 'Za pitanja u vezi sa ovim Uslovima korišćenja kontaktirajte nas na:', - email: 'E-mail: legal@damjan-savic.com' - } - } - } -}; diff --git a/src/i18n/locales-old/sr/portfolio/index.ts b/src/i18n/locales-old/sr/portfolio/index.ts deleted file mode 100644 index 0e0c32b..0000000 --- a/src/i18n/locales-old/sr/portfolio/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -// src/i18n/locales/sr/portfolio/index.ts -import { aiDataReader } from './projects/ai-data-reader'; -import kamenpro from './projects/kamenpro'; -import smartWarehouse from './projects/smart-warehouse'; -import powerPlatformGovernance from './projects/power-platform-governance'; -import websiteMitKi from './projects/website-mit-ki'; -import aiMusicProduction from './projects/ai-music-production'; -import automatedAdCreatives from './projects/automated-ad-creatives'; -import cursorIde from './projects/cursor-ide'; -export const portfolio = { - // Meta informacije za portfolio stranicu - seo: { - title: 'Portfolio - Damjan Savić', - description: 'Otkrijte moje projekte u oblasti JTL integracije, e-commerce-a i digitalne transformacije.' - }, - // Portfolio naslovi i filteri - sections: { - title: 'Portfolio', - subtitle: 'Odabrani projekti i reference', - filterTitle: 'Kategorije', - sortTitle: 'Sortiranje' - }, - // Opcije filtera - filters: { - all: 'Sve', - categories: { - 'Data Science': 'Data Science', - 'AI Development': 'AI razvoj', - 'Integration': 'Integracija', - 'Full-Stack Development': 'Full-Stack razvoj', - 'Data Processing': 'Obrada podataka', - 'Content Production': 'Produkcija sadržaja', - 'Machine Learning': 'Machine Learning', - 'Automation': 'Automatizacija', - 'Web Development': 'Web razvoj', - 'AI & Automation': 'AI & Automatizacija', - 'Enterprise Software': 'Enterprise Software' - } - }, - // Opcije sortiranja - sort: { - date: 'Datum', - title: 'Naslov', - category: 'Kategorija' - }, - // UI tekstovi - ui: { - loading: 'Učitavanje projekata...', - noProjects: 'Nije pronađen nijedan projekat', - viewProject: 'Pogledaj projekat', - backToPortfolio: 'Nazad na portfolio', - technologies: 'Tehnologije', - client: 'Klijent', - duration: 'Trajanje', - visitWebsite: 'Poseti sajt', - viewRepository: 'Pogledaj repozitorijum', - viewDocumentation: 'Dokumentacija' - }, - // Svi projekti - projects: { - 'ai-data-reader': aiDataReader, - 'kamenpro': kamenpro, - 'smart-warehouse': smartWarehouse, - 'power-platform-governance': powerPlatformGovernance, - 'website-mit-ki': websiteMitKi, - 'ai-music-production': aiMusicProduction, - 'automated-ad-creatives': automatedAdCreatives, - 'cursor-ide': cursorIde, - } -}; diff --git a/src/i18n/locales-old/sr/portfolio/projects/ai-data-reader.ts b/src/i18n/locales-old/sr/portfolio/projects/ai-data-reader.ts deleted file mode 100644 index b712bb6..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/ai-data-reader.ts +++ /dev/null @@ -1,107 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/ai-data-reader.ts -export const aiDataReader = { - meta: { - slug: 'ai-data-reader', - title: "Veštačka inteligencija za ekstrakciju podataka iz PDF dokumenata", - description: "Razvoj automatizovanog sistema za ekstrakciju i strukturiranje podataka o proizvodima iz PDF dokumenata", - excerpt: "Integracija Claude AI za inteligentnu obradu informacija o proizvodima i besprekornu JTL-ERP integraciju.", - date: "2025-02", - category: "Data Processing", - client: "Amazon Seller", - duration: "2 meseca", - url: "https://www.damjan-savic.com", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Python", "FastAPI", "Claude AI", "PyPDF", "Pydantic", "JTL-Wawi"], - tags: ["Ekstrakcija podataka", "ERP", "Automatizacija procesa", "PDF obrada"] - }, - content: { - intro: "AI sistem za automatizovanu ekstrakciju podataka o proizvodima iz PDF dokumenata sa direktnom integracijom u JTL sisteme za upravljanje robom, razvijen za maksimalnu efikasnost u održavanju podataka o proizvodima.", - - challenge: { - title: "Izazov", - description: "Ručna obrada podataka o proizvodima iz PDF dokumenata bila je vremenski zahtevna i podložna greškama.", - points: [ - "Velika količina PDF dokumenata sa informacijama o proizvodima", - "Vremenski zahtevno ručno unošenje podataka", - "Nekonzistentan kvalitet podataka", - "Visoki zahtevi za osobljem" - ] - }, - - solution: { - title: "Naše rešenje", - description: "Razvoj AI sistema za automatizovanu ekstrakciju podataka", - content: "Koristeći Claude AI i moderne Python tehnologije, stvorili smo potpuno automatizovano rešenje koje obrađuje PDF dokumente i integriše izdvojene podatke direktno u JTL sistem za upravljanje robom.", - points: [ - "Automatizovana obrada PDF-ova", - "AI ekstrakcija podataka", - "Inteligentna validacija podataka", - "Besprekorna JTL integracija" - ] - }, - - technical: { - title: "Tehnička implementacija", - description: "Rešenje je zasnovano na modularnoj Python arhitekturi sa nekoliko ključnih komponenti:", - points: [ - "Robusna ekstrakcija teksta iz PDF-a sa PyPDF", - "AI ekstrakcija podataka sa Claude AI", - "Validacija kroz Pydantic modele", - "JTL-ERP integracija preko CSV izvoza" - ], - code: `class ProductData(BaseModel): - artikel_nummer: str - name: str - hersteller: str - inhaltsstoffe: List[str] - allergene: List[str] - naehrwerte: NaehrwertData - nettogewicht: str - vegan: bool - vegetarisch: bool - -def _extract_with_claude(self, prompt: str) -> Dict[str, Any]: - '''Ekstrahuje strukturirane podatke sa Claude AI.''' - response = self.client.messages.create( - model='claude-3-sonnet-20240229', - messages=[{ - 'role': 'user', - 'content': prompt - }] - ) - return self._clean_json_string(response.content)` - }, - - implementation: { - title: "Proces implementacije", - description: "Automatizovani tok rada je implementiran u nekoliko faza:", - points: [ - "Batch obrada PDF-ova iz ulaznog direktorijuma", - "Inteligentno prepoznavanje i strukturiranje teksta", - "Višeslojna logika validacije", - "Robusno rukovanje greškama", - "Integracija sa postojećim sistemima" - ] - }, - - results: { - title: "Rezultati i uticaj", - description: "Implementacija je dovela do značajnih poboljšanja u poslovnim procesima:", - points: [ - "90% uštede vremena u održavanju podataka o proizvodima", - "99% preciznost u ekstrakciji podataka", - "Eliminacija ručnog unosa podataka", - "Standardizovan kvalitet podataka o proizvodima", - "Značajno smanjena stopa grešaka" - ] - }, - - conclusion: "Razvijeni sistem je revolucionirao upravljanje podacima o proizvodima. Kombinovanjem AI tehnologije sa automatizovanom obradom podataka, ne samo da smo drastično povećali efikasnost već smo i značajno poboljšali kvalitet podataka. Projekat impresivno demonstrira kako moderna AI rešenja mogu rešiti praktične poslovne probleme." - } -}; - -// Re-export za kompatibilnost sa sistemom za uvoz projekata -export default aiDataReader; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/portfolio/projects/ai-music-production.ts b/src/i18n/locales-old/sr/portfolio/projects/ai-music-production.ts deleted file mode 100644 index f31f547..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/ai-music-production.ts +++ /dev/null @@ -1,114 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/ai-music-production.ts -export const aiMusicProduction = { - meta: { - slug: 'ai-music-production', - title: "Suno AI - Muzička produkcija uz pomoć VI | Od teksta do gotovog tracka", - description: "Kompletan workflow za muzičku produkciju sa Suno AI: pisanje tekstova, generisanje instrumentala, miksovanje stilova i objavljivanje na Soundcloud-u.", - excerpt: "Muzička produkcija uz pomoć VI sa Suno AI. Od ručno napisanog teksta do gotovog tracka za 2-3 sata - uključujući dizajn covera i upload na Soundcloud.", - date: "2025-01", - category: "VI & Kreativa", - client: "Lični projekat", - duration: "U toku", - url: "https://soundcloud.com/desetka", - videoUrl: "https://www.tella.tv/video/musikproduktion-per-ki-mit-damjan-savic-desetka-1-2mjh", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["Suno AI", "Soundcloud", "Pinterest", "Photoshop", "VI Muzička Produkcija"], - tags: ["Suno AI", "Muzička Produkcija", "VI Muzika", "Desetka", "Soundcloud", "Kreativna VI"] - }, - content: { - intro: "Muzička produkcija uz pomoć VI: Kompletan workflow za kreiranje profesionalnih pesama sa Suno AI. Od ideje preko teksta do gotovog tracka na Soundcloud-u - sve u strukturiranom procesu.", - - challenge: { - title: "Izazov", - description: "Tradicionalna muzička produkcija zahteva opsežne resurse i veštine.", - points: [ - "Klasična muzička produkcija zahteva skup softver i hardver", - "Instrumentalisti i producenti moraju biti koordinisani", - "Proces produkcije često traje nedeljama ili mesecima", - "Visoke prepreke za umetnike bez muzičkog obrazovanja", - "Kreativne vizije je teško brzo realizovati" - ] - }, - - solution: { - title: "Rešenje", - description: "Strukturiran VI workflow za efikasnu muzičku produkciju", - content: "Sa Suno AI, ceo proces muzičke produkcije može se svesti na samo nekoliko sati. Workflow kombinuje ljudsku kreativnost (tekstovi) sa VI-generisanom muzikom za autentične, profesionalne rezultate.", - points: [ - "Tekstovi se pišu ručno - puna kreativna kontrola", - "Suno AI generiše instrumentale na osnovu style prompta", - "Iterativno remiksovanje za savršen zvuk", - "Dizajn covera sa Pinterest inspiracijom i Photoshop-om", - "Direktan upload na Soundcloud pod aliasom 'Desetka'" - ] - }, - - technical: { - title: "Workflow", - description: "Korak po korak proces za VI muzičku produkciju:", - points: [ - "Pisanje teksta sa jasnom šemom rima (npr. završeci na e, a, i)", - "Mentalno razvijanje melodije tokom pisanja", - "Generisanje instrumentala u Suno AI sa style promptovima", - "Konfiguracija Weirdness (35%) i Audio Influence (75%)", - "Miksovanje različitih stilova (npr. Synthwave → Luxury Rap)", - "Lajkovanje favorita za VI efekat učenja", - "Pronalaženje covera na Pinterest-u i obrada u Photoshop-u (1950x1950px)", - "WAV eksport i upload na Soundcloud" - ], - code: `// Suno AI Style Konfiguracija -const sunoConfig = { - name: "205 Matrica Instrumental", - settings: { - weirdness: "35%", - styleInfluence: "75%", - audioInfluence: "25-35%" // Niže za remastered - }, - styles: [ - "Synthwave", - "Melodic RIP", - "Luxury Rap" - ], - tips: [ - "Lajkovane pesme utiču na buduće generacije", - "Za artefakte: smanjiti Audio Influence", - "Kombinovati stilove za jedinstven zvuk" - ] -};` - }, - - implementation: { - title: "Kreativni proces", - description: "Umetnost pisanja pesama uz VI podršku:", - points: [ - "Pisanje tekstova na srpskom (melodičan zvuk)", - "Jasna šema rima za hook i strofe", - "Mentalno razvijanje melodije pre produkcije", - "Nisu potrebni instrumentali za početne ideje", - "Prevod na engleski moguć kasnije", - "2-3 sata za kompletnu pesmu", - "U dobrim danima: 3 pesme po satu moguće" - ] - }, - - results: { - title: "Rezultati", - description: "Prednosti VI muzičke produkcije:", - points: [ - "Vreme produkcije smanjeno sa nedelja na sate", - "Puna kreativna kontrola nad tekstovima i pravcem", - "Profesionalni instrumentali bez studija", - "Iterativan rad do savršenog zvuka", - "Direktan put od koncepta do publikacije", - "Umetnički alias 'Desetka' uspostavljen na Soundcloud-u" - ] - }, - - conclusion: "VI muzička produkcija sa Suno AI revolucionira kreativni proces. Kombinacija ručno napisanih tekstova i VI-generisanih instrumentala omogućava brzu i profesionalnu realizaciju muzičkih vizija. Čovek ostaje kreativno u centru - VI je alat za realizaciju." - } -}; - -export default aiMusicProduction; diff --git a/src/i18n/locales-old/sr/portfolio/projects/automated-ad-creatives.ts b/src/i18n/locales-old/sr/portfolio/projects/automated-ad-creatives.ts deleted file mode 100644 index ee4eb0b..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/automated-ad-creatives.ts +++ /dev/null @@ -1,95 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/automated-ad-creatives.ts -export const automatedAdCreatives = { - meta: { - slug: 'automated-ad-creatives', - title: 'Automatizovani Ad Kreativci: Kreiranje reklama uz pomoć VI', - description: 'Razvoj radnog toka za automatizovano kreiranje Facebook Ad kreativaca sa Claude Opus 4.5 - bez dizajn softvera, u potpunosti u chatu', - excerpt: 'Od dizajn šablona do gotove reklame: Kako VI revolucioniše kreiranje reklamnih kreativaca.', - date: '2025-01', - category: 'VI & Automatizacija', - client: 'Lični projekat', - duration: '1 Dan', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Opus 4.5', 'HTML/CSS', 'PNG Export', 'Prompt Engineering'], - tags: ['VI', 'Automatizacija', 'Facebook Ads', 'Marketing', 'No-Code'], - videoUrl: 'https://www.tella.tv/video/automatisierte-ad-creatives-1kyw' - }, - content: { - intro: 'Programi kao što su Illustrator, InDesign, Figma ili Canva mogu biti komplikovani. Ovaj projekat pokazuje kako se Facebook Ad kreativci mogu kreirati u potpunosti u VI chatu - bez dizajn softvera, bez znanja programiranja.', - - challenge: { - title: 'Izazov', - description: 'Kreiranje reklamnih materijala za Facebook kampanje tradicionalno zahteva:', - points: [ - 'Poznavanje dizajn softvera (Illustrator, Figma, Canva)', - 'Vreme za učenje i implementaciju', - 'Razumevanje zahteva formata i najboljih praksi', - 'Iteracije između dizajna i marketinga', - 'Budžet za dizajnere ili dizajn alate' - ] - }, - - solution: { - title: 'Rešenje', - description: 'VI-vođen radni tok koji obrađuje ceo proces u chat prozoru:', - content: 'Kompletan radni tok se odvija u chatu sa Claude Opus 4.5. Alternativno, Gemini ili ChatGPT takođe rade.', - points: [ - 'Dizajn šablon kao vizuelna referenca za VI', - 'HTML generisanje kroz promptove na prirodnom jeziku', - 'Automatska konverzija u PNG slike', - 'Integracija dodatnih slika putem drag & drop', - 'Iteracije kroz jednostavne chat instrukcije' - ] - }, - - technical: { - title: 'Tehnička implementacija', - description: 'Radni tok u detaljima:', - points: [ - 'Korak 1: Dizajn šablon sa Envato Elements kao referenca', - 'Korak 2: Pošalji prompt sa slikom Claude-u - HTML se generiše', - 'Korak 3: Eksportuj HTML u PNG', - 'Korak 4: Integriši dodatne slike putem drag & drop' - ] - }, - - tools: { - title: 'Korišćeni alati', - items: [ - { name: 'Claude Opus 4.5', purpose: 'VI za HTML generisanje i eksport slika' }, - { name: 'Envato Elements', purpose: 'Dizajn šabloni kao referenca' }, - { name: 'Unsplash', purpose: 'Besplatne slike za kreativce' } - ] - }, - - results: { - title: 'Prednosti ovog pristupa', - description: 'VI-vođen radni tok nudi nekoliko prednosti:', - points: [ - 'Nisu potrebne dizajnerske veštine: VI preuzima tehničku implementaciju', - 'Brze iteracije: Promene u sekundama kroz chat instrukcije', - 'Skalabilno: Neograničen broj varijanti za A/B testiranje', - 'Isplativo: Nisu potrebni skupi dizajn alati', - 'Fleksibilno: Radi i sa Gemini ili ChatGPT' - ] - }, - - useCases: { - title: 'Slučajevi upotrebe', - points: [ - 'Performance Marketing: Brzi testovi kreativaca bez čekanja', - 'E-Commerce: Reklamiranje proizvoda na skali', - 'Startapi: Profesionalni oglasi bez dizajn tima', - 'Agencije: Efikasan rad sa klijentima za kreiranje reklama' - ] - }, - - conclusion: 'Radni tok demonstrira kako VI pojednostavljuje kreiranje reklamnih kreativaca. Rezultat možda još nije na nivou profesionalnog grafičkog dizajnera - ali za brze testove, početne nacrte ili timove bez dizajn resursa, ovaj pristup je prava alternativa. Tehnologija se brzo razvija.' - } -}; - -export default automatedAdCreatives; diff --git a/src/i18n/locales-old/sr/portfolio/projects/cursor-ide.ts b/src/i18n/locales-old/sr/portfolio/projects/cursor-ide.ts deleted file mode 100644 index a985e82..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/cursor-ide.ts +++ /dev/null @@ -1,89 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/cursor-ide.ts -export const cursorIde = { - meta: { - slug: 'cursor-ide', - title: 'Cursor IDE: Razvoj softvera sa veštačkom inteligencijom', - description: 'Uvod u Cursor - revolucionarno razvojno okruženje sa veštačkom inteligencijom koje omogućava softverske projekte kroz prirodni jezik', - excerpt: 'Otkrijte kako Cursor IDE funkcioniše kao vaš lični AI programer i kreira kompletne projekte iz prirodnog jezika.', - date: '2025-01', - category: 'AI & Razvoj', - client: 'Tutorial', - duration: 'Uvod', - url: 'https://cursor.com', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Cursor IDE', 'AI', 'Next.js', 'React', 'TypeScript', 'Node.js'], - tags: ['AI', 'IDE', 'Razvoj', 'Tutorial', 'Generisanje koda', 'Automatizacija'], - videoUrl: 'https://www.tella.tv/video/cursor-ide-1-1kjg' - }, - content: { - intro: 'Cursor je razvojno okruženje sa veštačkom inteligencijom koje funkcioniše kao lični programer. Razume prirodni jezik, samostalno generiše kod, pronalazi i ispravlja greške - i gradi kompletne softverske projekte na zahtev.', - - challenge: { - title: 'Ranije: Izazovi', - description: 'Tradicionalni razvoj softvera je imao visoke prepreke:', - points: [ - 'Programski jezici su morali da se nauče', - 'Traženje grešaka je često trajalo satima', - 'Svaki red koda je morao da se otkuca ručno', - 'Google i Stackoverflow su bili stalni pratioci', - 'Visoka ulazna barijera za ne-programere' - ] - }, - - solution: { - title: 'Sada: Rešenje sa Cursorom', - description: 'Cursor revolucioniše razvoj softvera kroz AI integraciju:', - content: 'Zamislite da imate ličnog programera koji sedi pored vas i može da razume sve vaše softverske ideje na prirodnom govornom jeziku. To je upravo Cursor.', - points: [ - 'Jednostavno opišite šta želite', - 'AI automatski pronalazi i ispravlja greške', - 'AI generiše kompletan kod', - 'AI objašnjava ceo projekat u editoru', - 'Integrisani pretraživač za direktan pregled' - ] - }, - - technical: { - title: 'Cursor interfejs', - description: 'Nakon preuzimanja sa cursor.com, interfejs se sastoji od:', - points: [ - 'Meni traka (gore): Navigacija kroz IDE', - 'File Explorer (levo): Struktura projekta sa direktorijumima i fajlovima', - 'Editor (centar): Pregled i uređivanje fajlova', - 'Terminal (dole): Dostupan preko View > Terminal', - 'AI Chat (desno): Kontrola razvoja preko AI' - ] - }, - - implementation: { - title: 'Prvi koraci', - description: 'Kako započeti sa Cursorom:', - points: [ - 'Preuzmite Cursor sa cursor.com', - 'Instalirajte za vaš operativni sistem', - 'Kreirajte folder projekta i otvorite ga u Cursoru', - 'Opišite šta želite da napravite u AI chatu', - 'Pustite AI da radi i prilagodite po potrebi' - ] - }, - - results: { - title: 'Praktičan primer', - description: 'Jednostavan prompt kao "Želim da napravim sajt sa Next, React i TypeScript sa modernim Hello World prikazom" je dovoljan:', - points: [ - 'AI proverava stanje projekta', - 'Ceo projekat se automatski gradi', - 'Posle nekoliko sekundi, sajt je spreman', - 'Instalirajte zavisnosti sa npm install', - 'Pokrenite razvojni server sa npm run dev' - ] - }, - - conclusion: 'Cursor revolucioniše razvoj softvera dramatično snižavajući barijeru između ideje i implementacije. Umesto učenja programskih jezika, jednostavno opišete na prirodnom jeziku šta želite - a AI odradi ostatak.' - } -}; - -export default cursorIde; diff --git a/src/i18n/locales-old/sr/portfolio/projects/kamenpro.ts b/src/i18n/locales-old/sr/portfolio/projects/kamenpro.ts deleted file mode 100644 index edf6a9f..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/kamenpro.ts +++ /dev/null @@ -1,135 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/kamenpro.ts -export const kamenpro = { - meta: { - slug: 'kamenpro', - title: "KamenPro: Digitalna transformacija za dekorativni kamen", - description: "Razvoj moderne multi-lokacijske PWA aplikacije za proizvođača dekorativnog kamena iz Bijeljine koristeći React 18.3 i Supabase", - excerpt: "Od kamena do piksela: Kako tradicionalna zanatska radnja generiše 300% više upita kroz modernu web tehnologiju.", - date: "2025-01", - category: "Web Development", - client: "KamenPro - Željko", - duration: "3 meseca", - url: "https://kamenpro.net", - repository: "", - documentation: "", - published: true, - featured: true, - technologies: ["React 18.3", "TypeScript", "Vite", "Supabase", "Framer Motion", "TailwindCSS", "PWA", "Schema.org"], - tags: ["Multi-Location SEO", "E-Commerce", "PWA", "Lokalni biznis", "Performance"] - }, - content: { - intro: "KamenPro, etablirani proizvođač dekorativnog kamena iz Bijeljine, suočio se sa izazovom prenošenja svog tradicionalnog zanata u digitalni svet. Ova studija slučaja pokazuje kako moderna web tehnologija pomaže lokalnoj zanatskoj radnji da postigne regionalni uspeh.", - - challenge: { - title: "Izazov", - description: "Kao proizvođač visokokvalitetnih kamenih obloga od belog cementa, KamenPro-u je nedostajala digitalna prezentacija za takmičenje sa online konkurencijom.", - points: [ - "Bez digitalne prezentacije uprkos visokoj online potražnji", - "Kupci su tražili 'dekorativni kamen' bez pronalaženja KamenPro", - "Nedostaje prezentacija proizvoda za 3 različite teksture kamena", - "Bez lokalne SEO prezentacije u Bijeljini, Brčkom i Tuzli", - "Gubitak potencijalnih kupaca zbog digitalno prisutne konkurencije" - ] - }, - - solution: { - title: "Pristup rešenju", - description: "Moderna PWA sa multi-lokacijskom SEO strategijom za maksimalnu lokalnu vidljivost", - content: "Razvili smo visoko-performantnu Progressive Web aplikaciju koja čini KamenPro-ov zanat digitalno opipljivim. Fokus je bio na lokalnoj vidljivosti u tri grada i optimalnoj prezentaciji proizvoda za graditelje i arhitekte.", - points: [ - "Multi-lokacijski SEO za Bijeljinu, Brčko i Tuzlu", - "Katalog proizvoda sa HD slikama tekstura kamena", - "PWA za offline dostupnost na gradilištima", - "Supabase backend za upravljanje proizvodima i upitima", - "Schema.org LocalBusiness za optimalnu Google prezentaciju" - ] - }, - - technical: { - title: "Tehnička implementacija", - description: "Multi-lokacijska SEO arhitektura sa lokacijski specifičnim landing stranicama:", - points: [ - "Rutiranje bazirano na lokaciji za 3 grada", - "Sistem kataloga proizvoda sa Supabase", - "Optimizacija slika za teške fotografije teksture kamena", - "PWA za offline katalog proizvoda", - "Schema.org LocalBusiness za svaki grad" - ], - code: `// Multi-lokacijski SEO sa Schema.org -const LocationPage: React.FC<{city: string}> = ({ city }) => { - const structuredData = { - "@context": "https://schema.org", - "@type": "LocalBusiness", - "name": \`KamenPro \${city}\`, - "description": \`Dekorativni kamen i fasadne obloge u \${city}\`, - "telephone": "+387 65 678 634", - "address": { - "@type": "PostalAddress", - "addressLocality": city, - "addressCountry": "BA" - }, - "areaServed": { - "@type": "GeoCircle", - "geoRadius": "50000" - } - }; - - return ( - <> - - Dekorativni kamen {city} | KamenPro - - - - - - - ); -}; - -// Upravljanje proizvodima sa Supabase -interface StoneProduct { - id: string; - name: string; - type: 'decorative_stone' | 'rustic_brick'; - dimensions: { length: 44, width: 8.5, thickness: 15 }; - price_per_m2: number; // 33-40 BAM - weight_per_m2: 32; // kg - textures: string[]; // 3 različite - available_colors: string[]; -}` - }, - - implementation: { - title: "Lokalni SEO uspesi", - description: "Kroz ciljanu multi-lokacijsku optimizaciju postigli smo top rangiranja:", - points: [ - "Rang #1 za 'dekorativni kamen bijeljina'", - "Rang #2 za 'fasadne obloge brčko'", - "Rang #1 za 'rustik cigla tuzla'", - "Google My Business integracija za sve lokacije", - "Lokalni backlink-ovi od građevinskih kompanija" - ] - }, - - results: { - title: "Merljivi poslovni rezultati", - description: "Digitalna transformacija donela je impresivne rezultate:", - points: [ - "300% više upita u prva 3 meseca", - "Od 0 do ranga 1-3 za lokalne pretrage", - "45 upita/mesec umesto prethodnih ~12", - "25-30 projekata/kvartal umesto 8-10", - "ROI od 275% za 6 meseci", - "Ekspanzija na nova tržišta kroz online prisustvo" - ] - }, - - conclusion: "Digitalna transformacija KamenPro impresivno pokazuje kako tradicionalna zanatska radnja može otvoriti nova tržišta kroz modernu web tehnologiju. Kombinacija multi-lokacijskog SEO, optimizovane prezentacije proizvoda i tehničke izvrsnosti dovela je do utrostručavanja upita kupaca. Posebno značajno: lokalni proizvođač kamenih obloga iz Bijeljine sada dostiže kupce u celom regionu - dokaz da promišljena digitalizacija donosi merljive uspehe čak i u tradicionalnom zanatu." - } -}; - -// Re-export za kompatibilnost sa sistemom uvoza projekata -export default kamenpro; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/portfolio/projects/power-platform-governance.ts b/src/i18n/locales-old/sr/portfolio/projects/power-platform-governance.ts deleted file mode 100644 index 62c733f..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/power-platform-governance.ts +++ /dev/null @@ -1,244 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/power-platform-governance.ts -export const powerPlatformGovernance = { - meta: { - slug: 'power-platform-governance', - title: "Power Platform Governance & Automation Suite", - description: "Enterprise platforma za upravljanje Microsoft Power Platform i SharePoint Online", - excerpt: "Centralno upravljanje, monitoring i automatizacija celokupnog M365 okruženja - od provizioniranja do praćenja usklađenosti.", - date: "2025-01", - category: "Enterprise Software", - client: "Enterprise CoE timovi", - duration: "6 meseci", - url: "https://governance-demo.azurewebsites.net", - repository: "", - documentation: "/docs/power-platform-governance", - published: true, - featured: true, - technologies: ["React", "TypeScript", "Node.js", "Microsoft Graph", "PowerShell", "Azure Functions", "GraphQL", "Fluent UI"], - tags: ["Microsoft 365", "Power Platform", "SharePoint", "Upravljanje", "Automatizacija", "Enterprise"] - }, - content: { - intro: "Sveobuhvatna enterprise platforma koja omogućava IT administratorima i Power Platform CoE timovima da centralno upravljaju i automatizuju celokupno M365 okruženje.", - - challenge: { - title: "Izazov", - description: "Nekontrolisan rast Power Apps, Flows i SharePoint sajtova doveo je do kritičnih problema.", - points: [ - "Shadow IT kroz neupravljani citizen development", - "Rizici usklađenosti i kršenje zaštite podataka", - "Eksplodirajući troškovi licenci zbog nekorišćenih resursa", - "Nedostatak vidljivosti u Power Platform pejzaž", - "Ručni, procesima skloni greškama provizioniranja", - "Nekonzistentne politike upravljanja među timovima" - ] - }, - - solution: { - title: "Rešenje", - description: "Centralna platforma za upravljanje sa real-time monitoringom i automatizacijom", - content: "Platforma kombinuje moderne web tehnologije sa Microsoft 365 API-jima kako bi omogućila besprekorno integrisanje i potpunu kontrolu nad celokupnim Power Platform okruženjem.", - points: [ - "Automated Provisioning Hub za sajtove, timove i okruženja", - "Real-Time Monitoring Dashboard sa live activity stream-ovima", - "Power Platform Governance Center sa DLP policy enforcement", - "Compliance & Security Suite sa permission analyzer-om", - "PowerShell Automation Framework za prilagođene operacije", - "Intelligent Resource Optimization sa ML-baziranim predikcijama" - ] - }, - - technical: { - title: "Tehnička implementacija", - description: "Rešenje se zasniva na modernoj mikroservisnoj arhitekturi sa event-driven dizajnom:", - points: [ - "React 18.3 sa TypeScript-om za type-safe frontend razvoj", - "Fluent UI v9 za prirodan Microsoft izgled", - "GraphQL API sa Apollo Server-om za efikasne upite podataka", - "Azure Functions za serverless automatizaciju", - "PowerShell 7.4 Core za M365 operacije", - "Azure Service Bus za asinhrono procesiranje poslova", - "Cosmos DB za globalnu replikaciju podataka" - ] - }, - - features: { - title: "Ključne funkcionalnosti", - items: [ - { - title: "Automated Provisioning Hub", - description: "Kreiranje SharePoint sajtova bazirano na šablonima sa bulk provizioniranjem i post-provisioning workflow-ima", - icon: "automation" - }, - { - title: "Real-Time Monitoring", - description: "Live activity stream-ovi sa ažuriranjima u realnom vremenu preko WebSocket-a i GraphQL subscription-a", - icon: "monitoring" - }, - { - title: "Permission Analyzer", - description: "Cross-tenant izveštaji o dozvolama sa detekcijom overprivileged korisnika i audit eksternog deljenja", - icon: "security" - }, - { - title: "PowerShell Framework", - description: "120+ prilagođenih cmdlet-a sa centralizovanom bibliotekom skripti i zakazanom automatizacijom", - icon: "powershell" - }, - { - title: "Compliance Suite", - description: "DLP policy builder sa otkrivanjem osetljivih podataka i automatizovanom remedijacijom", - icon: "compliance" - }, - { - title: "Resource Optimizer", - description: "ML-bazirana predikcija korišćenja sa automatizovanim čišćenjem i alokacijom troškova", - icon: "optimization" - } - ] - }, - - implementation: { - title: "Faze implementacije", - phases: [ - { - title: "Faza 1: Osnova", - duration: "6 nedelja", - description: "Postavljanje arhitekture i osnovnih servisa", - tasks: [ - "Azure infrastruktura sa Terraform-om", - "GraphQL API i servis autentifikacije", - "Microsoft Graph integracija", - "PowerShell framework za izvršavanje" - ] - }, - { - title: "Faza 2: Osnovne funkcionalnosti", - duration: "10 nedelja", - description: "Razvoj glavnih funkcionalnosti", - tasks: [ - "Provisioning engine sa sistemom šablona", - "Real-time monitoring dashboard", - "Implementacija permission analyzer-a", - "DLP policy upravljanje" - ] - }, - { - title: "Faza 3: Inteligencija", - duration: "8 nedelja", - description: "ML funkcionalnosti i automatizacija", - tasks: [ - "Model predikcije korišćenja resursa", - "Automatizovani cleanup workflow-i", - "Engine za optimizaciju troškova", - "Sistem detekcije anomalija" - ] - } - ] - }, - - challenges: { - title: "Izazovi i rešenja", - items: [ - { - challenge: "API rate limiting", - solution: "Inteligentno grupisanje zahteva sa eksponencijalnim backoff-om i Redis keširanje" - }, - { - challenge: "Multi-tenant izolacija", - solution: "Odvojene baze podataka po tenant-u sa row-level bezbednošću i enkripcijom" - }, - { - challenge: "Real-time ažuriranja sa velikim količinama podataka", - solution: "WebSocket ažuriranja sa GraphQL subscription-ima i delta upitima" - }, - { - challenge: "Bezbednost izvršavanja PowerShell-a", - solution: "Sandboxed izvršavanje sa Azure Container Instances i Just Enough Administration" - } - ] - }, - - results: { - title: "Rezultati", - description: "Platforma je potpuno transformisala Power Platform upravljanje:", - metrics: [ - { label: "Vreme provizioniranja", value: "95% brže" }, - { label: "Stopa usklađenosti", value: "94%" }, - { label: "Smanjenje troškova", value: "40%" }, - { label: "Produktivnost admina", value: "3x" }, - { label: "Incident response", value: "80% brže" }, - { label: "Smanjenje Shadow IT", value: "90%" } - ], - impact: "Rešenje je omogućilo organizacijama da pronađu balans između inovacije i kontrole. Citizen developeri su mogli bezbedno da rade dok je IT zadržao potpuno upravljanje." - }, - - performance: { - title: "Performanse i skaliranje", - metrics: { - technical: { - title: "Tehničke metrike", - items: [ - "35.000+ linija koda", - "45+ React komponenti", - "120+ PowerShell cmdlet-a", - "80+ GraphQL endpoint-a", - "92% test pokrivenost" - ] - }, - scale: { - title: "Skaliranje", - items: [ - "25+ enterprise tenant-a", - "50.000+ upravljanih resursa", - "5.000+ dnevnih automatizacija", - "100+ istovremenih korisnika", - "99.9% uptime SLA" - ] - }, - architecture: { - title: "Arhitektura", - items: [ - "Multi-region deployment", - "Auto-skaliranje sa AKS", - "Globalna replikacija podataka", - "Zero-downtime deployment", - "Disaster recovery <1h RTO" - ] - } - } - }, - - testimonial: { - text: "Ova platforma je revolucionisala naše Power Platform upravljanje. Ono što je nekad trajalo nedeljama sada se dešava za minute - potpuno automatizovano i usklađeno.", - author: "Michael Schmidt", - position: "Šef IT upravljanja", - company: "Fortune 500 kompanija" - }, - - learnings: { - title: "Naučene lekcije", - items: [ - "Event-driven arhitektura je esencijalna za skalabilnost sa enterprise workload-ima", - "PowerShell Core omogućava cross-platform automatizaciju bez Windows zavisnosti", - "GraphQL je smanjio API pozive za 60% kroz efikasno preuzimanje podataka", - "Policy as Code je značajno pojednostavio upravljanje", - "Inkrementalna sinhronizacija sa delta upitima je kritična za performanse" - ] - }, - - future: { - title: "Buduće perspektive", - description: "Platforma se kontinuirano proširuje i poboljšava.", - plans: [ - "AI-powered uvidi sa detekcijom anomalija", - "Microsoft Copilot integracija za prirodno upravljanje jezikom", - "Fabric Analytics za naprednu BI integraciju", - "Container Apps za serverless PowerShell izvršavanje", - "Zero Trust bezbednosni model", - "Cross-cloud podrška za AWS i Google Cloud" - ] - } - } -}; - -export default powerPlatformGovernance; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/portfolio/projects/smart-warehouse.ts b/src/i18n/locales-old/sr/portfolio/projects/smart-warehouse.ts deleted file mode 100644 index a4d6dc7..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/smart-warehouse.ts +++ /dev/null @@ -1,222 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/smart-warehouse.ts -export const smartWarehouse = { - meta: { - slug: 'smart-warehouse', - title: "Inteligentno upravljanje skladištem sa Computer Vision", - description: "AI sistem za upravljanje zalihama u realnom vremenu i optimizaciju skladišnih procesa", - excerpt: "Razvoj autonomnog sistema za upravljanje skladištem sa Computer Vision, IoT senzorima i mašinskim učenjem za precizno praćenje zaliha.", - date: "2025-01", - category: "AI & Automatizacija", - client: "LogiTech Solutions GmbH", - duration: "4 meseca", - url: "https://warehouse-demo.example.com", - repository: "", - documentation: "/case-studies/smart-warehouse", - published: true, - featured: true, - technologies: ["YOLOv8", "Python", "FastAPI", "React", "PostgreSQL", "Docker", "Kubernetes", "IoT", "MQTT"], - tags: ["Computer Vision", "Mašinsko učenje", "IoT", "Edge Computing", "Automatizacija"] - }, - content: { - intro: "Srednje veliki logistički provajder transformisao je svoje ručno upravljanje skladištem kroz potpuno automatizovan sistem koji kombinuje Computer Vision, IoT senzore i mašinsko učenje.", - - challenge: { - title: "Izazov", - description: "Ručno upravljanje zalihama dovelo je do značajnih operativnih problema.", - points: [ - "Neusaglašenosti između stvarnih i evidentiranih zaliha do 15%", - "Vremenski intenzivni ručni inventari (3-4 dana po kvartalu)", - "Nedostatak transparentnosti u realnom vremenu o nivoima zaliha", - "Neefikasno korišćenje skladišnog prostora zbog nedostatka optimizacije", - "Visoki troškovi osoblja zbog ručnih procesa" - ] - }, - - solution: { - title: "Rešenje", - description: "Razvoj potpuno automatizovanog sistema za upravljanje skladištem", - content: "Sistem kombinuje Computer Vision, IoT senzore i mašinsko učenje za kontinuirano, precizno praćenje zaliha bez ljudske intervencije.", - points: [ - "AI detekcija objekata pomoću kamera visoke rezolucije", - "IoT senzori težine za validaciju", - "Prediktivna analitika za optimizaciju zaliha", - "Dashboard u realnom vremenu sa mobilnim pristupom", - "Automatski okidači za ponovnu narudžbu" - ] - }, - - technical: { - title: "Tehnička implementacija", - description: "Rešenje se zasniva na modularnoj mikroservisnoj arhitekturi sa edge computing-om za procesiranje u realnom vremenu:", - points: [ - "YOLOv8 za preciznu detekciju objekata", - "Edge Computing za <50ms procesiranje slike", - "Apache Kafka za stream procesiranje 2TB podataka/dan", - "MQTT-bazirana IoT integracija sa 200+ senzora", - "PostgreSQL za perzistenciju podataka", - "Kubernetes za skalabilnost" - ] - }, - - features: { - title: "Ključne funkcionalnosti", - items: [ - { - title: "Detekcija objekata u realnom vremenu", - description: "98,7% tačnost u praćenju zaliha kroz AI prepoznavanje slike", - icon: "camera" - }, - { - title: "Integracija IoT senzora", - description: "200+ senzora validuje CV rezultate kroz merenja težine", - icon: "sensor" - }, - { - title: "Prediktivna analitika", - description: "Predviđanje kretanja zaliha i automatska ponovna narudžba", - icon: "chart" - }, - { - title: "Mobilni Dashboard", - description: "Pristup svim podacima skladišta u realnom vremenu sa bilo kog mesta", - icon: "mobile" - } - ] - }, - - implementation: { - title: "Faze implementacije", - phases: [ - { - title: "Faza 1: Proof of Concept", - duration: "4 nedelje", - description: "Razvoj prototipa i obuka modela", - tasks: [ - "Razvoj prototipa za jedan deo skladišta", - "Obuka ML modela sa 10.000+ anotiranih slika", - "Integracija 5 test kamera i 20 IoT senzora", - "Validacija tačnosti detekcije" - ] - }, - { - title: "Faza 2: Skaliranje", - duration: "8 nedelja", - description: "Kompletno uvođenje na 5.000m² skladišnog prostora", - tasks: [ - "Instalacija 45 kamera i 200+ senzora", - "Razvoj dashboard-a u realnom vremenu", - "Integracija sa postojećim ERP sistemom", - "Optimizacija performansi" - ] - }, - { - title: "Faza 3: Optimizacija", - duration: "4 nedelje", - description: "Fino podešavanje i napredne funkcionalnosti", - tasks: [ - "Fino podešavanje ML modela", - "Implementacija prediktivne analitike", - "Razvoj mobilne aplikacije", - "Obuka zaposlenih" - ] - } - ] - }, - - challenges: { - title: "Izazovi i rešenja", - items: [ - { - challenge: "Promenljivi uslovi osvetljenja", - solution: "HDR kamere sa adaptivnom predobradom slike i augmentovanim podacima za obuku" - }, - { - challenge: "Procesiranje velikih količina podataka u realnom vremenu", - solution: "Edge Computing za predprocesiranje i Apache Kafka za stream procesiranje" - }, - { - challenge: "Integracija sa nasleđenim sistemima", - solution: "Razvoj adapter sloja sa dvosmernom sinhronizacijom" - } - ] - }, - - results: { - title: "Rezultati", - description: "Sistem je potpuno transformisao upravljanje skladištem:", - metrics: [ - { label: "Tačnost detekcije", value: "98,7%" }, - { label: "Smanjenje vremena inventara", value: "85%" }, - { label: "Manje neusaglašenosti zaliha", value: "60%" }, - { label: "Iskorišćenost skladišnog prostora", value: "+35%" }, - { label: "ROI", value: "14 meseci" }, - { label: "Dostupnost sistema", value: "99,95%" } - ], - impact: "Transparentnost u realnom vremenu omogućila je proaktivno donošenje odluka i sprečila prekide u snabdevanju. Zaposleni su mogli da se fokusiraju na aktivnosti koje dodaju vrednost dok je AI upravljao zalihama." - }, - - performance: { - title: "Metrike performansi", - metrics: { - processing: { - title: "Procesiranje", - items: [ - "Procesiranje slike: <50ms po frejmu", - "API Response Time: p95 < 100ms", - "Procesiranje podataka: 500 događaja/sekund", - "System Uptime: 99.95%" - ] - }, - scale: { - title: "Skaliranje", - items: [ - "45 aktivnih kamera (do 200 moguće)", - "200+ IoT senzora", - "50+ istovremenih korisnika", - "50TB skladištenje podataka" - ] - }, - ml: { - title: "ML Performanse", - items: [ - "mAP@50: 0.92", - "Inference Time: 23ms", - "False Positive Rate: <2%", - "Model Size: 138MB" - ] - } - } - }, - - testimonial: { - text: "Implementacija je revolucionisala naše skladišne procese. Ono što je ranije trajalo danima sada se dešava u realnom vremenu. Tačnost i efikasnost su impresivne.", - author: "Thomas Weber", - position: "Šef logistike", - company: "LogiTech Solutions GmbH" - }, - - learnings: { - title: "Naučene lekcije", - items: [ - "Edge Computing je esencijalan: Predprocesiranje direktno na kameri smanjilo je mrežno opterećenje za 70%", - "Kvalitet podataka pre kvantiteta: 1.000 visokokvalitetnih anotacija bilo je vrednije od 10.000 automatski generisanih", - "Iterativni razvoj: Rano pilotiranje u jednoj oblasti omogućilo je brza prilagođavanja", - "Upravljanje promenama: Rano uključivanje zaposlenih bilo je ključno za prihvatanje" - ] - }, - - future: { - title: "Buduće perspektive", - description: "Sistem je dizajniran kao white-label rešenje i može se primeniti u drugim skladištima sa minimalnim prilagođavanjima.", - plans: [ - "Integracija robotike za automatizovano komisioniranje", - "Proširenje na spoljašnja skladišta i mobilne jedinice", - "AI-bazirano predviđanje potreba za održavanjem", - "Blockchain integracija za transparentnost lanca snabdevanja", - "AR naočare za radnike skladišta sa vizuelnim naznakama" - ] - } - } -}; - -export default smartWarehouse; \ No newline at end of file diff --git a/src/i18n/locales-old/sr/portfolio/projects/website-mit-ki.ts b/src/i18n/locales-old/sr/portfolio/projects/website-mit-ki.ts deleted file mode 100644 index ef3f108..0000000 --- a/src/i18n/locales-old/sr/portfolio/projects/website-mit-ki.ts +++ /dev/null @@ -1,80 +0,0 @@ -// src/i18n/locales/sr/portfolio/projects/website-mit-ki.ts -export const websiteMitKi = { - meta: { - slug: 'website-mit-ki', - title: 'Napravi svoj sajt uz pomoć VI: Od nule do gotove stranice', - description: 'Korak-po-korak vodič za izgradnju profesionalnog sajta sa Claude Code - usklađen sa GDPR-om, višejezičan, sa portfoliom i blogom', - excerpt: 'Kako da napraviš kompletan sajt za manje od sat vremena - bez pisanja ijedne linije koda.', - date: '2025-01', - category: 'VI & Automatizacija', - client: 'Lični projekat', - duration: '30 Minuta', - url: '', - repository: '', - documentation: '', - published: true, - featured: true, - technologies: ['Claude Code', 'React', 'TypeScript', 'Vercel', 'GitHub', 'Vite'], - tags: ['VI', 'Website', 'No-Code', 'Tutorial', 'Claude Code', 'Vercel'], - videoUrl: 'https://www.tella.tv/video/baue-deine-website-noch-heute-mit-ki-8f7v' - }, - content: { - intro: 'Profesionalni sajt bez znanja programiranja? Sa VI, to je danas moguće. Ovaj tutorijal pokazuje kompletan proces - od praznog projektnog foldera do gotovog, hostovanog sajta.', - - challenge: { - title: 'Izazov', - description: 'Tradicionalni put do sopstvenog sajta je često komplikovan i skup:', - points: [ - 'Web bilderi kao Wix, WordPress ili Webflow imaju mesečne troškove', - 'Sopstveni razvoj zahteva znanje programiranja', - 'Dizajneri i programeri su skupi', - 'GDPR usklađenost i SEO optimizacija su kompleksni', - 'Višejezična podrška i responsivan dizajn zahtevaju dodatni napor' - ] - }, - - solution: { - title: 'Rešenje', - description: 'Sa VI, kompletan sajt se može napraviti za manje od sat vremena:', - content: 'Kompletan radni tok koristi Claude Code za autonomni razvoj, GitHub za verzioniranje i Vercel za besplatan hosting.', - points: [ - 'GDPR-usklađena implementacija sa banerom za kolačiće', - 'Višejezična podrška (nemački, engleski, moguće i više)', - 'Portfolio stranica sa interaktivnim projektima', - 'Blog funkcionalnost za blog postove', - 'SEO optimizacija za bolje Google rangiranje', - 'Kontakt forma za potencijalne klijente' - ] - }, - - technical: { - title: 'Radni tok', - description: 'Ovako proces funkcioniše korak po korak:', - points: [ - 'Korak 1: Kreiraj GitHub nalog i repozitorijum', - 'Korak 2: Podesi Vercel nalog za besplatan hosting', - 'Korak 3: Pripremi lokalni projektni folder sa relevantnim dokumentima', - 'Korak 4: Otvori Claude Code i unesi prompt sa željenim funkcijama', - 'Korak 5: VI autonomno radi i kreira kompletan sajt', - 'Korak 6: Pushuj projekat na GitHub i importuj u Vercel' - ] - }, - - results: { - title: 'Prednosti ovog rešenja', - description: 'VI-vođen razvoj sajta nudi nekoliko prednosti:', - points: [ - 'Nisu potrebne veštine programiranja', - 'Minimalni troškovi: Samo VI pretplata i opciono domen', - 'Bolja vidljivost kroz SEO optimizaciju', - 'Potpuna kontrola: Kod je na GitHub-u, hosting je besplatan', - 'Brze izmene moguće kroz chat instrukcije', - 'Mobilno-optimiziran, responsivan dizajn uključen' - ] - }, - - conclusion: 'Kompletan, profesionalni sajt može se napraviti danas za manje od sat vremena - bez pisanja ijedne linije koda. Kombinacija VI razvoja, besplatnog hostinga i verzioniranja čini ovo rešenje interesantnim ne samo za programere, već za sve kojima je potrebna profesionalna web prezentacija.' - } -}; - -export default websiteMitKi; diff --git a/src/i18n/locales-old/sr/seo-content.ts b/src/i18n/locales-old/sr/seo-content.ts deleted file mode 100644 index e3164e1..0000000 --- a/src/i18n/locales-old/sr/seo-content.ts +++ /dev/null @@ -1,94 +0,0 @@ -// src/i18n/locales/sr/seo-content.ts -export const seoContent = { - hero: { - title: 'Damjan Savić | Fullstack, IoT и AI програмер', - subtitle: 'Скалабилна софтверска решења са IoT и AI интеграцијом', - description: 'Као fullstack програмер из Келна, Дамјан Савић се специјализује за развој скалабилних софтверских решења са IoT и AI интеграцијом.', - cta: { - primary: 'Погледајте пројекте', - secondary: 'Контактирајте ме' - } - }, - home: { - h1: 'Damjan Savić | Fullstack, IoT и AI програмер', - h2: [ - 'Скалабилна софтверска решења са IoT интеграцијом', - 'AI интеграција за модерне компаније', - 'Fullstack развој и дигитална трансформација' - ], - description: 'Као fullstack програмер из Келна, Дамјан Савић се специјализује за развој скалабилних софтверских решења са IoT и AI интеграцијом.', - structuredData: { - personName: 'Damjan Savić', - personNameCyrillic: 'Дамјан Савић', - jobTitle: 'Старији програмер пуног стека / Консултант за дигитална решења', - skills: [ - 'Софтвер за предузећа', - 'Облак архитектура', - 'Интеграција вештачке интелигенције', - 'JTL интеграција', - 'Python развој', - 'React/Next.js', - 'Дигитална трансформација' - ], - location: { - city: 'Келн', - region: 'Северна Рајна-Вестфалија', - country: 'Немачка', - countryCode: 'DE' - } - } - }, - about: { - h1: 'О Дамјану Савићу - Старији програмер пуног стека из Немачке', - h2: 'Експертиза у софтверу за предузећа и дигиталним решењима', - description: 'Упознајте Дамјана Савића (Damjan Savić), искусног старијег програмера пуног стека и консултанта за дигитална решења који помаже компанијама у Немачкој и Европи да оптимизују своје процесе кроз модерни софтвер, облак архитектуру и интеграцију вештачке интелигенције.', - expertise: { - title: 'Области стручности', - areas: [ - 'Развој софтвера за предузећа', - 'Облак архитектура и миграције', - 'Интеграција вештачке интелигенције', - 'JTL-WaWi интеграција', - 'Аутоматизација пословних процеса', - 'Дигитална трансформација' - ] - } - }, - portfolio: { - h1: 'Портфолио - Дамјан Савић', - h2: 'Пројекти софтвера за предузећа и дигиталних решења', - description: 'Истражите портфолио Дамјана Савића са пројектима из области софтвера за предузећа, облак архитектуре и интеграције вештачке интелигенције за водеће компаније у Немачкој и Европи.' - }, - contact: { - h1: 'Контактирајте Дамјана Савића', - h2: 'Старији програмер пуног стека и консултант за дигитална решења у Немачкој', - description: 'Ступите у контакт са Дамјаном Савићем за консултације о софтверу за предузећа, облак архитектури, интеграцији вештачке интелигенције или дигиталној трансформацији вашег пословања у Немачкој и Европи.' - }, - services: { - title: 'Услуге', - list: [ - { - name: 'Развој софтвера за предузећа', - description: 'Прилагођена решења за велике организације' - }, - { - name: 'Облак архитектура', - description: 'Дизајн и имплементација скалабилних облак решења' - }, - { - name: 'Интеграција вештачке интелигенције', - description: 'Модерна AI решења за оптимизацију процеса' - }, - { - name: 'JTL интеграција', - description: 'Експертска интеграција JTL-WaWi система' - }, - { - name: 'Дигитална трансформација', - description: 'Комплетна модернизација пословних процеса' - } - ] - } -} as const; - -export type SEOContentTranslations = typeof seoContent; \ No newline at end of file From 22e7b1e7c9ec8afbd33964e515a5ae5c274d72fd Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:30:54 +0100 Subject: [PATCH 3/5] auto-claude: subtask-2-1 - Verify no broken imports or references --- .auto-claude-status | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.auto-claude-status b/.auto-claude-status index da3bbdf..dd377c9 100644 --- a/.auto-claude-status +++ b/.auto-claude-status @@ -3,23 +3,23 @@ "spec": "028-remove-dead-code-locales-old-folder-with-100-unuse", "state": "building", "subtasks": { - "completed": 1, + "completed": 2, "total": 5, "in_progress": 1, "failed": 0 }, "phase": { - "current": "Dead Code Removal", + "current": "Build & Test Verification", "id": null, - "total": 2 + "total": 3 }, "workers": { "active": 0, "max": 1 }, "session": { - "number": 3, + "number": 4, "started_at": "2026-01-25T06:23:21.220095" }, - "last_update": "2026-01-25T06:29:19.835435" + "last_update": "2026-01-25T06:30:22.151054" } \ No newline at end of file From ae45f92e4453eec44de1812b4f0aace26cc90e71 Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:33:54 +0100 Subject: [PATCH 4/5] auto-claude: subtask-2-2 - Verify TypeScript compilation and build success --- .auto-claude-status | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.auto-claude-status b/.auto-claude-status index dd377c9..1f58195 100644 --- a/.auto-claude-status +++ b/.auto-claude-status @@ -3,7 +3,7 @@ "spec": "028-remove-dead-code-locales-old-folder-with-100-unuse", "state": "building", "subtasks": { - "completed": 2, + "completed": 3, "total": 5, "in_progress": 1, "failed": 0 @@ -18,8 +18,8 @@ "max": 1 }, "session": { - "number": 4, + "number": 5, "started_at": "2026-01-25T06:23:21.220095" }, - "last_update": "2026-01-25T06:30:22.151054" + "last_update": "2026-01-25T06:31:25.097795" } \ No newline at end of file From dc6e415712cf69305cee3e4aebfb104f4ba9cd42 Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:35:18 +0100 Subject: [PATCH 5/5] auto-claude: subtask-2-3 - Verify linting passes --- .auto-claude-status | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.auto-claude-status b/.auto-claude-status index 1f58195..ec300e7 100644 --- a/.auto-claude-status +++ b/.auto-claude-status @@ -3,7 +3,7 @@ "spec": "028-remove-dead-code-locales-old-folder-with-100-unuse", "state": "building", "subtasks": { - "completed": 3, + "completed": 4, "total": 5, "in_progress": 1, "failed": 0 @@ -18,8 +18,8 @@ "max": 1 }, "session": { - "number": 5, + "number": 6, "started_at": "2026-01-25T06:23:21.220095" }, - "last_update": "2026-01-25T06:31:25.097795" + "last_update": "2026-01-25T06:34:27.083288" } \ No newline at end of file