From 2dbb7e3512768926841ad440bc4a1684f20db8e4 Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 14 Dec 2025 02:28:25 +0100 Subject: [PATCH] Update: Sitemap, Dependencies und README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sitemap aktualisiert mit neuen Portfolio-Projekten - package-lock.json aktualisiert - README.md hinzugefΓΌgt πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- README.md | 144 ++++++++++++ package-lock.json | 570 +++++++++++++++++++++++++++++++++++++++++++++ public/sitemap.xml | 108 ++++----- 3 files changed, 768 insertions(+), 54 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2803005 --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# Portfolio - Damjan SaviΔ‡ + +Personal portfolio website showcasing my work as an **AI & Automation Specialist** based in Germany. + +**Live:** [damjan-savic.com](https://damjan-savic.com) + +## Current Role + +**Process Automation Specialist** @ Everlast Consulting GmbH (since Dec 2024) +- Developing AI agents with n8n and Zapier +- Building web scraping solutions +- RecroBot Voice Interview Platform +- Migration from Power Automate to n8n + +## Tech Stack + +### Frontend +- **React 18** - UI Framework with Suspense & Lazy Loading +- **TypeScript** - Type-safe development +- **Vite** - Build tool & dev server +- **Tailwind CSS** - Utility-first styling with custom design tokens +- **Framer Motion** - Animations & page transitions + +### Content & Internationalization +- **MDX** - Markdown + JSX for blog posts and project pages +- **i18next** - Multi-language support (German, English, Serbian) +- **react-helmet-async** - SEO meta tags & structured data + +### Backend & Services +- **Supabase** - Database & Authentication +- **Google Analytics 4** - Privacy-compliant analytics with cookie consent + +### PWA & Performance +- **Workbox** - Service Worker & caching strategies +- **vite-plugin-pwa** - Progressive Web App functionality +- **Code Splitting** - Vendor chunks for React, MDX, i18n, UI libraries + +### Testing & Quality +- **Vitest** - Unit testing +- **Testing Library** - React component testing +- **ESLint** - Code linting + +## Featured Project: RecroBot + +**AI Voice Interview Platform** - [recrobot.site](https://recrobot.site) + +Production Voice-AI platform for automated HR interviews built with: +- TypeScript / Next.js 14 +- Vapi Voice AI +- WebSocket for real-time communication +- Supabase (PostgreSQL) + +**Demo:** Enter "AI-Manager" as position to test + +## Features + +- **Multi-language support** - DE/EN/SR with automatic language detection +- **Progressive Web App** - Installable, offline-capable +- **SEO optimized** - Structured data (Schema.org), sitemap generation +- **Responsive Design** - Mobile-first approach +- **Cookie Consent** - GDPR-compliant with granular category control +- **Blog System** - MDX-based with frontmatter support +- **Portfolio Gallery** - Dynamic project showcase with filtering +- **Contact Form** - Integrated with backend services + +## Pages + +| Route | Description | +|-------|-------------| +| `/` | Homepage with Hero, Experience, Skills, Projects, FAQ | +| `/about` | Detailed profile, skills matrix, workflow, journey | +| `/portfolio` | Project gallery with category filters | +| `/portfolio/:slug` | Individual project detail pages | +| `/blog` | Blog post listing | +| `/blog/:slug` | Individual blog posts | +| `/contact` | Contact form & info | +| `/privacy` | Privacy policy | +| `/terms` | Terms of service | +| `/imprint` | Legal imprint | + +## Project Structure + +``` +src/ +β”œβ”€β”€ components/ # Reusable UI components +β”œβ”€β”€ hooks/ # Custom React hooks +β”œβ”€β”€ i18n/ # Translations (de, en, sr) +β”œβ”€β”€ pages/ # Page components +β”‚ β”œβ”€β”€ home/ +β”‚ β”œβ”€β”€ about/ +β”‚ β”œβ”€β”€ portfolio/ +β”‚ β”‚ └── projects/ # MDX project files +β”‚ β”œβ”€β”€ blog/ +β”‚ └── contact/ +β”œβ”€β”€ styles/ # Global styles +β”œβ”€β”€ utils/ # Helper functions +β”œβ”€β”€ routes.tsx # Route definitions +└── App.tsx # Root component +``` + +## Development + +```bash +# Install dependencies +npm install + +# Start dev server +npm run dev + +# Build for production +npm run build + +# Run tests +npm test + +# Preview production build +npm run preview +``` + +## Key Technologies Used + +**Languages:** TypeScript, Python, MDX + +**AI & Automation:** GPT-4 API, Claude API, Vapi Voice AI, n8n, Zapier + +**Frontend:** React, Next.js, Tailwind CSS, Framer Motion, Lucide Icons + +**Backend:** Supabase (PostgreSQL, Auth), WebSocket + +**Build Tools:** Vite, PostCSS, Terser + +**Testing:** Vitest, Testing Library, JSDOM + +**DevOps:** ESLint, Git, PWA/Service Workers, Vercel, Docker + +## Contact + +- **Email:** info@damjan-savic.com +- **Phone:** +49 175 695 0979 +- **LinkedIn:** [linkedin.com/in/damjan-savic](https://www.linkedin.com/in/damjan-savi%C4%87-720288127/) + +--- + +Built with React + TypeScript + Vite diff --git a/package-lock.json b/package-lock.json index 349ad40..5b481ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,6 +64,7 @@ "globals": "^15.9.0", "jsdom": "^24.0.0", "postcss": "^8.4.35", + "sharp": "^0.34.3", "tailwindcss": "^3.4.1", "typescript": "^5.5.3", "typescript-eslint": "^8.3.0", @@ -1780,6 +1781,17 @@ "node": ">=18" } }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -2391,6 +2403,496 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5004,6 +5506,16 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -10276,6 +10788,64 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "license": "MIT" }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/public/sitemap.xml b/public/sitemap.xml index ff5818e..e9b255e 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -3,7 +3,7 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> https://damjan-savic.com/ - 2025-12-13 + 2025-12-14 weekly 1.0 @@ -12,7 +12,7 @@ https://damjan-savic.com/en/ - 2025-12-13 + 2025-12-14 weekly 1.0 @@ -21,7 +21,7 @@ https://damjan-savic.com/sr/ - 2025-12-13 + 2025-12-14 weekly 1.0 @@ -30,7 +30,7 @@ https://damjan-savic.com/about - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -39,7 +39,7 @@ https://damjan-savic.com/en/about - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -48,7 +48,7 @@ https://damjan-savic.com/sr/about - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -57,7 +57,7 @@ https://damjan-savic.com/portfolio - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -66,7 +66,7 @@ https://damjan-savic.com/en/portfolio - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -75,7 +75,7 @@ https://damjan-savic.com/sr/portfolio - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -84,7 +84,7 @@ https://damjan-savic.com/blog - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -93,7 +93,7 @@ https://damjan-savic.com/en/blog - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -102,7 +102,7 @@ https://damjan-savic.com/sr/blog - 2025-12-13 + 2025-12-14 weekly 0.9 @@ -111,7 +111,7 @@ https://damjan-savic.com/contact - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -120,7 +120,7 @@ https://damjan-savic.com/en/contact - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -129,7 +129,7 @@ https://damjan-savic.com/sr/contact - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -138,7 +138,7 @@ https://damjan-savic.com/privacy - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -147,7 +147,7 @@ https://damjan-savic.com/en/privacy - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -156,7 +156,7 @@ https://damjan-savic.com/sr/privacy - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -165,7 +165,7 @@ https://damjan-savic.com/terms - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -174,7 +174,7 @@ https://damjan-savic.com/en/terms - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -183,7 +183,7 @@ https://damjan-savic.com/sr/terms - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -192,7 +192,7 @@ https://damjan-savic.com/blog/erp-integration-breuninger - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -201,7 +201,7 @@ https://damjan-savic.com/en/blog/erp-integration-breuninger - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -210,7 +210,7 @@ https://damjan-savic.com/sr/blog/erp-integration-breuninger - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -219,7 +219,7 @@ https://damjan-savic.com/blog/fullstack-development-timetracking - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -228,7 +228,7 @@ https://damjan-savic.com/en/blog/fullstack-development-timetracking - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -237,7 +237,7 @@ https://damjan-savic.com/sr/blog/fullstack-development-timetracking - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -246,7 +246,7 @@ https://damjan-savic.com/blog/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -255,7 +255,7 @@ https://damjan-savic.com/en/blog/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -264,7 +264,7 @@ https://damjan-savic.com/sr/blog/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.7 @@ -273,7 +273,7 @@ https://damjan-savic.com/portfolio/ai-data-reader - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -282,7 +282,7 @@ https://damjan-savic.com/en/portfolio/ai-data-reader - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -291,7 +291,7 @@ https://damjan-savic.com/sr/portfolio/ai-data-reader - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -300,7 +300,7 @@ https://damjan-savic.com/portfolio/bi-vision - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -309,7 +309,7 @@ https://damjan-savic.com/en/portfolio/bi-vision - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -318,7 +318,7 @@ https://damjan-savic.com/sr/portfolio/bi-vision - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -327,7 +327,7 @@ https://damjan-savic.com/portfolio/business-intelligence-ai - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -336,7 +336,7 @@ https://damjan-savic.com/en/portfolio/business-intelligence-ai - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -345,7 +345,7 @@ https://damjan-savic.com/sr/portfolio/business-intelligence-ai - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -354,7 +354,7 @@ https://damjan-savic.com/portfolio/claude-personal-assistant - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -363,7 +363,7 @@ https://damjan-savic.com/en/portfolio/claude-personal-assistant - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -372,7 +372,7 @@ https://damjan-savic.com/sr/portfolio/claude-personal-assistant - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -381,7 +381,7 @@ https://damjan-savic.com/portfolio/e-commerce-integration - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -390,7 +390,7 @@ https://damjan-savic.com/en/portfolio/e-commerce-integration - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -399,7 +399,7 @@ https://damjan-savic.com/sr/portfolio/e-commerce-integration - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -408,7 +408,7 @@ https://damjan-savic.com/portfolio/local-llm-training - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -417,7 +417,7 @@ https://damjan-savic.com/en/portfolio/local-llm-training - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -426,7 +426,7 @@ https://damjan-savic.com/sr/portfolio/local-llm-training - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -435,7 +435,7 @@ https://damjan-savic.com/portfolio/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -444,7 +444,7 @@ https://damjan-savic.com/en/portfolio/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -453,7 +453,7 @@ https://damjan-savic.com/sr/portfolio/rfid-automation - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -462,7 +462,7 @@ https://damjan-savic.com/portfolio/timetracking-software - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -471,7 +471,7 @@ https://damjan-savic.com/en/portfolio/timetracking-software - 2025-12-13 + 2025-12-14 monthly 0.8 @@ -480,7 +480,7 @@ https://damjan-savic.com/sr/portfolio/timetracking-software - 2025-12-13 + 2025-12-14 monthly 0.8