diff --git a/.gitignore b/.gitignore index b99378e..e649a89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ .cache/ public/ +.env diff --git a/package-lock.json b/package-lock.json index 4665ef8..538ba33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,8 @@ "gatsby-plugin-sass": "^5.7.0", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-google-recaptcha": "^3.1.0", + "react-simple-captcha": "^9.3.1", "sass": "^1.49.7" } }, @@ -9134,6 +9136,15 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -12289,6 +12300,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-async-script": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", + "integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "^3.3.0", + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -12484,6 +12508,19 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -12502,6 +12539,106 @@ "node": ">=0.10.0" } }, + "node_modules/react-simple-captcha": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/react-simple-captcha/-/react-simple-captcha-9.3.1.tgz", + "integrity": "sha512-pQ/WKjXns9ukhjjbaSZhl2P0QygHs50N9hxMmPAiFMh+0xXt2AocvSsEe24LyW/eOzOso+2Ifiuym/TZMyYDsA==", + "license": "MIT", + "dependencies": { + "react-html-parser": "^2.0.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-simple-captcha/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/react-simple-captcha/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/react-simple-captcha/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/react-simple-captcha/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/react-simple-captcha/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/react-simple-captcha/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/react-simple-captcha/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, + "node_modules/react-simple-captcha/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/react-simple-captcha/node_modules/react-html-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-html-parser/-/react-html-parser-2.0.2.tgz", + "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==", + "license": "MIT", + "dependencies": { + "htmlparser2": "^3.9.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0" + } + }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -22182,6 +22319,14 @@ } } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -24604,6 +24749,15 @@ "object-assign": "^4.1.1" } }, + "react-async-script": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", + "integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "prop-types": "^15.5.0" + } + }, "react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -24741,6 +24895,15 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "requires": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -24756,6 +24919,85 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==" }, + "react-simple-captcha": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/react-simple-captcha/-/react-simple-captcha-9.3.1.tgz", + "integrity": "sha512-pQ/WKjXns9ukhjjbaSZhl2P0QygHs50N9hxMmPAiFMh+0xXt2AocvSsEe24LyW/eOzOso+2Ifiuym/TZMyYDsA==", + "requires": { + "react-html-parser": "^2.0.2" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "react-html-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-html-parser/-/react-html-parser-2.0.2.tgz", + "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==", + "requires": { + "htmlparser2": "^3.9.0" + } + } + } + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", diff --git a/package.json b/package.json index 5c51d11..e536e17 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "gatsby-plugin-sass": "^5.7.0", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-google-recaptcha": "^3.1.0", + "react-simple-captcha": "^9.3.1", "sass": "^1.49.7" } } diff --git a/src/content/kamil.js b/src/content/kamil.js index 7edb366..bca5afd 100644 --- a/src/content/kamil.js +++ b/src/content/kamil.js @@ -18,6 +18,7 @@ import WorkSiiLogo from "../images/work_sii_logo.png" import WorkInfinidatLogo from "../images/work_infinidat_logo.png" import WorkTechemLogo from "../images/work_techem_logo.png" import WorkAdobeLogo from "../images/work_adobe_logo_2.png" +import WorkAptivLogo from "../images/work_aptiv_logo.png" import InterestsBlockchainLogo from "../images/interests_blockchain_logo.png" import InterestsBlenderLogo from "../images/interests_blender_logo.png" @@ -28,176 +29,15 @@ export const content_pl = [ type: "generalTitleSegment", title: "Kamil Żuk", image: MePng, + content_language: "pl", content: { "E-mail": "zukkamil.44@gmail.com", - "Github": "git.00x097.com/tbs093a", + "Telefon": "+48 570 688 112", + "Git": "git.00x097.com/tbs093a", + "DevOps Blog": "blog.00x097.com/", "Wykształcenie": "Wyższe / Inżynier", - "Miejsce Zamieszkania": "Rzeszów / Polska", - "Data Urodzenia": "30.06.1997 r.", } }, - { - type: "titleSegment", - title: "Umiejętności", - }, - { - type: "workSubSegment", - tabs: 0, - title: "Programowanie - Python", - image: "", //SkillsPythonLogo, - branchBorderColor: "#ffd748", - mainBorderColor: null, - firstElement: true, - content: [ - "Django", - "Django REST Framework", - "Channels 3.0", - "Celery (Task Manager)", - "Asyncio", - ], - }, - { - type: "workSubSegment", - tabs: 0, - title: "DevOps", - image: "", //SkillsDevOpsLogo, - mainBorderColor: null, - content: [], - }, - { - type: "workSubSegment", - tabs: 1, - title: "Automatyzacja", - image: "", //SkillsBashLogo, - branchBorderColor: "#4aa720", - mainBorderColor: "#2e8cb1", - content: [ - "Jenkins (CI/CD / Automatyzacja Procesów (Job's) / GitOps)", - "Ansible (Automatyzacja konfiguracji środowisk developerskich / serwerowych)", - "Bash / ZSH (Linux)", - "Powershell (Windows)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#4aa720", - mainBorderColor: "#2e8cb1", - }, - - { - type: "workSubSegment", - tabs: 1, - title: "Konteneryzacja", - image: "", //SkillsContainersLogo, - branchBorderColor: "#00b7ff", - mainBorderColor: "#2e8cb1", - content: [ - "Docker", - "Docker-Compose (Mikroserwisy zorientowane na pojedyńcze serwery lub debugowanie)", - "MiniKube (Lokalne debugowanie manifestów K8S)", - "Kubernetes (Helm / Cert-Manager / Ingress / K9S)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#00b7ff", - mainBorderColor: "#2e8cb1", - }, - { - type: "workSubSegment", - tabs: 1, - title: "Konfiguracja", - image: "", //SkillsNginxLogo, - branchBorderColor: "#d90000", - mainBorderColor: "#2e8cb1", - content: [ - "Apache", - "Nginx (https-portal)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#d90000", - mainBorderColor: "#2e8cb1", - }, - { - type: "workSubSegment", - tabs: 1, - title: "Obsługa Cloud Provider'ów", - image: "", //SkillsCloudProvidersLogo, - branchBorderColor: "#f96900", - mainBorderColor: "#2e8cb1", - content: [ - "Hetzner", - "OVH", - "AWS", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#f96900", - mainBorderColor: "#2e8cb1", - }, - { - type: "workSubSegment", - tabs: 0, - title: "Konfiguracja & Administracja Baz Danych", - image: "", //SkillsDatabasesLogo, - mainBorderColor: null, - content: [], - }, - { - type: "workSubSegment", - tabs: 1, - title: "Bazy Relacyjne (SQL)", - image: "", //SkillsRelationDbLogo, - branchBorderColor: "#7b00b3", - mainBorderColor: "#1038a7", - content: [ - "MariaDB", - "MySQL", - "PostgreSQL", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#7b00b3", - mainBorderColor: "#1038a7", - }, - { - type: "workSubSegment", - tabs: 1, - title: "Bazy Dokumentowe (NoSQL)", - image: "", //SkillsDocumentDbLogo, - branchBorderColor: "#047900", - mainBorderColor: "#1038a7", - content: [ - "MongoDB (Sharded Cluster)", - "ElasticSearch (ElasticSearch / Kibana / Logstash)", - "Redis (Cache / Task Queue)", - "RabbitMQ (Task Queue)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#047900", - mainBorderColor: "#1038a7", - }, - { - type: "workSubSegment", - tabs: 0, - title: "Angielski - Poziom B2", - image: "", //SkillsEnglishLogo, - mainBorderColor: null, - lastElement: true, - content: [], - }, { type: "titleSegment", title: "Doświadczenie", @@ -205,19 +45,218 @@ export const content_pl = [ { type: "workSubSegment", tabs: 0, - title: "Zespół Szkół Elektronicznych w Rzeszowie / Technikum nr 6 - Technik Informatyk - od 2013 do 2017", - image: WorkZSELogo, - mainBorderColor: null, + title: "Sii Sp. z o. o. - od 10.11.2022", firstElement: true, - noElements: true, - content: [], + image: WorkSiiLogo, + content: [] + }, + { + type: "workSubSegment", + tabs: 1, + title: "Aptiv PLC - DevOps Engineer - od 11.02.2025", + image: WorkAptivLogo, + branchBorderColor: "#000000", + mainBorderColor: "#0464a8", + content: [ + "Konserwacja & Ulepszanie pipeline'ów & job'ów (Jenkins / Wind River Studio / Python / Bash / GitGerrit)", + "Automtizacja ręcznych zadań (Jenkins / Wind River Studio / Python / Bash / GitGerrit)", + "Praca z Artifactory & Registry (JFrog)", + "Praca z Mikroserwisami (Docker / Kubernetes)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#000000", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Projekty Wewnętrzne - DevOps Engineer & Python Developer - od 01.11.2024 do 11.02.2025", + image: WorkSiiLogo, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + content: [ + "Konserwacja inrastruktury (Terrafrom / Azure / Hetzner)", + "Konserwacja infrastruktury mikroserwisowej (Docker / Kubernetes / Helm)", + "Konserwacja serwerów (Linux)", + "Automatyzacja konfiguracji serwerów (Ansible / Kubespray / Bash / Python)", + "Ulepszanie / konserwacja job'ów (Jenkins)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#fa0c00", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Adobe Inc - DevOps Engineer & Site Reliability Engineer - od 01.12.2023 do 01.11.2024", + image: WorkAdobeLogo, + branchBorderColor: "#fa0c00", + mainBorderColor: "#0464a8", + content: [ + "Przygotowywanie Root Cause Analysis (RCA) Awarii Adobe Experience Manager (AEM)", + "Analiza Java Heap-Dumps & Thread-Dumps (Wycieki Pamięci / Operacje Wykonywane Wątków)", + "Analiza Dashboard'ów SRE (New Relic / Splunk / Grafana)", + "Tworzenie Dashboard'ów SRE (Splunk)", + "Automatyzacja Analizy & Rutynowych Zadań (Bash / Python)", + "Analiza Zachowania Infrastruktury & Serwisów (Kubernetes / Linux / AEM)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#fa0c00", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#f87479", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Techem GmbH - DevOps Engineer - od 30.05.2023 do 30.11.2023", + image: WorkTechemLogo, + branchBorderColor: "#f87479", + mainBorderColor: "#0464a8", + content: [ + "Utrzymywanie Infrastruktury mikroserwisów (Docker / Docker Compose)", + "Utrzymywanie Infrastruktury serwerów (Jenkins Agent - Windows / Jenkins Master - Linux)", + "Automatyzacja konfiguracji serwerów (Ansible / Bash / Powershell)", + "Automatyzacja uruchamiania testów urządzeń IrDA na środowisku CI/CD (Regresja, Merge Request, Commit) (Jenkins CI/CD / Bash / Powershell / Python - TOX)", + "Automatyzacja bodwania i kolekcjonowania reużywalnych pakietów języka python (Jenkins CI/CD / Private PyPI / Python)", + "Automatyzacja raportowania testów (Jenkins CI/CD / Test-Result-Analyzer / Jira Xray)", + "Automatyzacja procesów walidujących kod (Pre-commit / Black Formatter / Flake8 / MyPY / etc.)" + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#f87479", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Projekty Wewnętrzne - DevOps Engineer - od 25.02.2023 do 27.05.2023", + image: WorkSiiLogo, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + content: [ + "Utrzymywanie infrastruktury mikroserwisów (Docker / Kubernetes / Helm)", + "Utrzymywanie infrastruktury serwerów (Linux)", + "Automatyzacja konfiguracji serwerów (Ansible / Kubespray / Bash)", + "Ulepszanie / Utrzymywanie procesów zautomatyzowanych (Gitlab-CI)", + "Automatyzacja raportowania przebiegu wdrożenia CI/CD (Gitlab-CI / SonarQube)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#8fc5c6", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Infinidat Inc - Integration Developer - od 10.11.2022 do 24.02.2023", + image: WorkInfinidatLogo, + branchBorderColor: "#8fc5c6", + mainBorderColor: "#0464a8", + content: [ + "Utrzymywanie infrastruktury serwerów (VMware / Vcenter / Vsphere / ESXi)", + "Wdrażanie hostów / węzłów Jenkinsa (Jenkins nodes - z różnymi wersjami distro Linux'a oraz Windows'a) pod budowę i integrację aplikacji (CI/CD)", + "Wdrażanie hostów Vcenter / Vsphere / ESXi", + "Rozwiązywanie problemów na etapie integracji (Jenkins - naprawa na podstawie testów)", + "Ulepszanie procesów oraz rozwiązań integracyjnych (Jenkins pipeline / Gitlab / Python / Bash)", + "Automatyzacja rutynowych czynności (Bash / Python / Ansible / Jenkins)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#8fc5c6", + mainBorderColor: "#0464a8", }, { type: "workSubSegment", tabs: 0, - title: "Uniwersytet Rzeszowski - Studia Inżynierskie - Informatyka - od 2017 do 2021", + title: "Sembot Sp. z o. o. - od 01.11.2020 do 30.10.2022", + image: WorkSembotLogo, + content: [] + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#f5c314", + mainBorderColor: "#f5c314", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Inżynier DevOps & Programista Python", + image: "", + branchBorderColor: "#f5c314", + mainBorderColor: "#f5c314", + content: [ + "Administracja serwerów (OVH / AWS / Digital Ocean)", + "Konfiguracja serwerów (Nginx (Https-Portal) / Apache / Docker)", + "Automatyzacja operacji rutynowych (Ansible / Jenkins pipeline / Bash scripts)", + "Wdrażanie produkcyjne oprogramowania zorientowanego na kontenerach (Docker / Docker-Compose)", + "Programowanie narzędzi MerchTech (Python / Django / Django REST Framework)", + "Implementacja, konfiguracja oraz administracja baz danych do obsługi narzędzi MerchTech (Big Data) (MongoDb / Elasticsearch / MariaDb / MySQL / Redis / AWS SQS)" + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#f5c314", + mainBorderColor: "#f5c314", + }, + + { + type: "workSubSegment", + tabs: 0, + title: "Uniwersytet Rzeszowski - Studia inżynierskie - Informatyka - od 2017 do 2021", image: WorkURLogo, - content: [], + content: [] + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#015198", + mainBorderColor: "#015198", }, { type: "workSubSegment", @@ -247,136 +286,390 @@ export const content_pl = [ { type: "workSubSegment", tabs: 0, - title: "Sembot Sp. z o. o. - DevOps Engineer & Python Developer - od 01.11.2020 do 30.10.2022", - image: WorkSembotLogo, - branchBorderColor: "#f5c314", + title: "Zespół Szkół Elektronicznych w Rzeszowie / Technikum nr 6 - Technik Informatyk - od 2013 do 2017", + image: WorkZSELogo, mainBorderColor: null, - content: [ - "Administracja serwerów (OVH / AWS / Digital Ocean)", - "Konfiguracja serwerów (Nginx (Https-Portal) / Apache / Docker)", - "Automatyzacja operacji rutynowych (Ansible / Jenkins pipeline / Bash scripts)", - "Wdrażanie produkcyjne oprogramowania zorientowanego na kontenerach (Docker / Docker-Compose)", - "Programowanie narzędzi MerchTech (Python / Django / Django REST Framework)", - "Implementacja, konfiguracja oraz administracja baz danych do obsługi narzędzi MerchTech (Big Data) (MongoDb / Elasticsearch / MariaDb / MySQL / Redis / AWS SQS)" - ], + firstElement: true, + noElements: true, + content: [], + }, + { + type: "titleSegment", + title: "Inne Projekty", }, { type: "workSubSegment", tabs: 0, - title: "Sii Sp. z o. o. - od 10.11.2022", - image: WorkSiiLogo, + title: "DevOps", + image: "", + branchBorderColor: "#04009b", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "Klaster K8S na Serwerach Bare Metal (Hetzner / Terraform / Kubespray)", + image: "", + branchBorderColor: "#8b0000", + mainBorderColor: "#04009b", + content: [ + "Utrzymanie klastra 3 węzłów (Hetzner / Terraform / Ansible / Kubespray)", + "Zarządzanie obiektami K8S (Helm / Terraform)", + "Hosting, administracja i utrzymanie usług wewnętrznych i zewnętrznych (Jenkins / Gitea / Wordpress i oprogramowanie niestandardowe)", + "Hosting, administracja i utrzymanie baz danych i rozwiązań cacheujących (PostgreSQL / MariaDb / Elasticsearch / Redis)", + "Hosting, administracja i utrzymanie rozwiązań pamięci masowej (Minio)", + "Automatyzacja rutynowych operacji (Jenkins / skrypty Groovy / Ansible / Bash / Python)", + "Udostępnianie aplikacji w internecie (Ingress / Cert-Manager / MetalLB)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#8b0000", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Inne", + image: "", + branchBorderColor: "#008b78", + mainBorderColor: "#04009b", + content: [ + "Blog DevOps (Wordpress): https://blog.00x097.com/", + "Autokonfiguracja Linuxa (integracja niestandardowych dotfiles) (Ansible / Bash / ZSH), repozytorium: https://git.00x097.com/tbs093a/linux.config", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#008b78", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 0, + title: "Programowanie", + image: "", + branchBorderColor: "#ffd748", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "XGPU - Aplikacja do udostępniania rozproszonych zasobów GPU do planowania i wykonywania zadań szkolenia AI i renderowania 3D", + image: "", + branchBorderColor: "#005707", + mainBorderColor: "#ffd748", + content: [ + "Backend oparty na frameworku FastAPI (Python) z REST (Zarządzanie kontami / CRUD obiektów) i WebSocket API (Planowanie, wykonywanie i monitorowanie zadań)", + "Zewnętrzny skrypt pracownika oparty na Python i Bash - połączony z backendem przez WebSocket", + "Planowanie, wykonywanie i monitorowanie zadań zewnętrznego pracownika przez WebSocket API", + "Szkolenie AI przez zewnętrznego pracownika oparte na NCCL DDP (Distributed Data Parallel) (PyTorch) i renderowanie 3D oparte na renderowaniu Blendera", + "Konfiguracja i administracja bazą danych (PostgreSQL / MongoDB)", + "Implementacja pipelinów CI/CD (Jenkins / skrypty Groovy)", + "Frontend oparty na ReactJS i frameworku Gatsby", + "Konteneryzacja oparta na manifestach Docker (lokalnie)", + "Konteneryzacja oparta na manifestach K8S (serwery Bare Metal - Hetzner) (Ingress / Cert-Manager / Deployments / PV & PVC / etc.)", + "Praca z narzędziami AI Agents (Cursor AI / Copilot)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005707", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Przygotowanie AI Agents", + image: "", + branchBorderColor: "#005fc5", + mainBorderColor: "#ffd748", + content: [ + "AI Agent do podsumowania wideo na podstawie wygenerowanego transkryptu z podanego URL (Telegram / API youtube-transcript.io / Python / API OpenAI)", + "AI Agent do generowania treści bloga na podstawie planu dostarczonego w prompcie (Wordpress / Telegram / Python / API OpenAI)", + "AI Agent do interpretacji sygnałów rynku krypto i giełdy oraz automatycznego handlu (Telegram / Python / API OpenAI / API Mexc / API Kucoin / API Binance)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005fc5", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Inne", + image: "", + branchBorderColor: "#008b78", + mainBorderColor: "#ffd748", + content: [ + "Generator Curriculum Vitae (CV) (ReactJS / Gatsby) - przykład: https://cv.00x097.com/, repozytorium: https://git.00x097.com/tbs093a/curriculum.vitae", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#008b78", + mainBorderColor: "#ffd748", + }, + { + type: "titleSegment", + title: "Kursy i Certyfikaty", + }, + { + type: "workSubSegment", + tabs: 0, + title: "DevOps", + image: "", + branchBorderColor: "#04009b", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "Dostawcy Chmury", + image: "", + branchBorderColor: "#005fc5", + mainBorderColor: "#04009b", + content: [ + "AZ-900: Microsoft Azure Fundamentals Exam Prep (Microsoft Certified: Azure Fundamentals) - Scott Duffy (TOGAF® Trainer, Microsoft Azure MVP)", + "AZ-104: Microsoft Azure Administrator Exam Prep (Microsoft Certified: Azure Administrator Associate) - Scott Duffy (TOGAF® Trainer, Microsoft Azure MVP)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005fc5", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Infrastruktura jako Kod", + image: "", + branchBorderColor: "#7b00ab", + mainBorderColor: "#04009b", + content: [ + "HashiCorp Certified: Terraform Associate - Hands-On Labs - Bryan Krausen (Ambasador HashiCorp) & Gabe Maentz (Autoryzowany Instruktor HashiCorp)", + "HashiCorp Certified: Terraform Associate Practice Exam 2025 - Bryan Krausen (Ambasador HashiCorp)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#7b00ab", + mainBorderColor: "#04009b", + }, + { + type: "titleSegment", + title: "Umiejętności", + }, + { + type: "workSubSegment", + tabs: 0, + title: "Programowanie", + image: "", + branchBorderColor: "#ffd748", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "Języki Programowania i Skryptowe", + image: "", + branchBorderColor: "#6d3d00", + mainBorderColor: "#ffd748", + content: [ + "Python", + "Bash / ZSH / Powershell", + "Javascript (Pure JS / ReactJS)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#6d3d00", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Narzędzia LLM i AI", + image: "", + branchBorderColor: "#8b0000", + mainBorderColor: "#ffd748", + content: [ + "Publiczne LLM (Claude / Gemini / ChatGPT)", + "Lokalne LLM (Ollama - Bielik AI / DeepSeek)", + "Agenty kodujące (Cursor AI / Copilot)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#8b0000", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 0, + title: "DevOps", + image: "", //SkillsDevOpsLogo, mainBorderColor: null, content: [], }, { type: "workSubSegment", tabs: 1, - title: "Infinidat Inc - Integration Developer - od 10.11.2022 do 24.02.2023", - image: WorkInfinidatLogo, - branchBorderColor: "#8fc5c6", - mainBorderColor: "#0464a8", + title: "Automatyzacja", + image: "", //SkillsBashLogo, + branchBorderColor: "#4aa720", + mainBorderColor: "#2e8cb1", content: [ - "Utrzymywanie infrastruktury serwerów (VMware / Vcenter / Vsphere / ESXi)", - "Wdrażanie hostów / węzłów Jenkinsa (Jenkins nodes - z różnymi wersjami distro Linux'a oraz Windows'a) pod budowę i integrację aplikacji (CI/CD)", - "Wdrażanie hostów Vcenter / Vsphere / ESXi", - "Rozwiązywanie problemów na etapie integracji (Jenkins - naprawa na podstawie testów)", - "Ulepszanie procesów oraz rozwiązań integracyjnych (Jenkins pipeline / Gitlab / Python / Bash)", - "Automatyzacja rutynowych czynności (Bash / Python / Ansible / Jenkins)", + "Jenkins (CI/CD / Automatyzacja procesów rutynowych (zadania) / GitOps)", + "Ansible (Konfiguracja serwerów)", + "Terraform / OpenTofu (Infrastruktura jako Kod)", + "Bash / ZSH (Linux)", + "Powershell (Windows)", + "Python (Cross-Platform)", ], }, { type: "mergeBranchSegment", tabs: 1, - branchBorderColor: "#8fc5c6", - mainBorderColor: "#0464a8", + branchBorderColor: "#4aa720", + mainBorderColor: "#2e8cb1", }, { type: "workSubSegment", tabs: 1, - title: "Projekty Wewnętrzne - DevOps Engineer - od 25.02.2023 do 27.05.2023", - image: WorkSiiLogo, - branchBorderColor: "#0464a8", - mainBorderColor: "#0464a8", + title: "Doświadczenie z dostawcami chmury", + image: "", //SkillsCloudProvidersLogo, + branchBorderColor: "#f96900", + mainBorderColor: "#2e8cb1", content: [ - "Utrzymywanie infrastruktury mikroserwisów (Docker / Kubernetes / Helm)", - "Utrzymywanie infrastruktury serwerów (Linux)", - "Automatyzacja konfiguracji serwerów (Ansible / Kubespray / Bash)", - "Ulepszanie / Utrzymywanie procesów zautomatyzowanych (Gitlab-CI)", - "Automatyzacja raportowania przebiegu wdrożenia CI/CD (Gitlab-CI / SonarQube)", + "Hetzner", + "OVH", + "AWS", + "Azure", ], }, { type: "mergeBranchSegment", tabs: 1, - branchBorderColor: "#0464a8", - mainBorderColor: "#0464a8", + branchBorderColor: "#f96900", + mainBorderColor: "#2e8cb1", }, { type: "workSubSegment", tabs: 1, - title: "Techem GmbH - DevOps Engineer - od 30.05.2023 do 30.11.2023", - image: WorkTechemLogo, - branchBorderColor: "#f87479", - mainBorderColor: "#0464a8", + title: "Konteneryzacja", + image: "", //SkillsContainersLogo, + branchBorderColor: "#00b7ff", + mainBorderColor: "#2e8cb1", content: [ - "Utrzymywanie Infrastruktury mikroserwisów (Docker / Docker Compose)", - "Utrzymywanie Infrastruktury serwerów (Jenkins Agent - Windows / Jenkins Master - Linux)", - "Automatyzacja konfiguracji serwerów (Ansible / Bash / Powershell)", - "Automatyzacja uruchamiania testów urządzeń IrDA na środowisku CI/CD (Regresja, Merge Request, Commit) (Jenkins CI/CD / Bash / Powershell / Python - TOX)", - "Automatyzacja bodwania i kolekcjonowania reużywalnych pakietów języka python (Jenkins CI/CD / Private PyPI / Python)", - "Automatyzacja raportowania testów (Jenkins CI/CD / Test-Result-Analyzer / Jira Xray)", - "Automatyzacja procesów walidujących kod (Pre-commit / Black Formatter / Flake8 / MyPY / etc.)" + "Docker & Docker-Compose", + "Podman", + "Kubernetes (Kubespray / Helm / Cert-Manager / Ingress / K9S)", ], }, { type: "mergeBranchSegment", tabs: 1, - branchBorderColor: "#f87479", - mainBorderColor: "#0464a8", + branchBorderColor: "#00b7ff", + mainBorderColor: "#2e8cb1", }, { type: "workSubSegment", tabs: 1, - title: "Adobe Inc - DevOps Engineer & Site Reliability Engineer - od 01.12.2023", - image: WorkAdobeLogo, - branchBorderColor: "#fa0c00", - mainBorderColor: "#0464a8", + title: "Monitoring", + image: "", + branchBorderColor: "#000000", + mainBorderColor: "#2e8cb1", content: [ - "Przygotowywanie Root Cause Analysis (RCA) Awarii Adobe Experience Manager (AEM)", - "Analiza Java Heap-Dumps & Thread-Dumps (Wycieki Pamięci / Operacje Wykonywane Wątków)", - "Analiza Dashboard'ów SRE (New Relic / Splunk / Grafana)", - "Tworzenie Dashboard'ów SRE (Splunk)", - "Automatyzacja Analizy & Rutynowych Zadań (Bash / Python)", - "Analiza Zachowania Infrastruktury & Serwisów (Kubernetes / Linux / AEM)", + "Grafana", + "Prometheus", + "ElasticSearch", + "Kibana", + "Logstash", + "New Relic", + "Splunk", + "Fluent-Bit", ], }, { type: "mergeBranchSegment", tabs: 1, - branchBorderColor: "#fa0c00", - mainBorderColor: "#0464a8", + branchBorderColor: "#000000", + mainBorderColor: "#2e8cb1", + }, + { + type: "workSubSegment", + tabs: 0, + title: "Konfiguracja i administracja bazami danych", + image: "", //SkillsDatabasesLogo, + mainBorderColor: null, + content: [], }, { type: "workSubSegment", tabs: 1, - title: "Inside Projects - DevOps Engineer & Python Developer - from 01.11.2024", - image: WorkSiiLogo, - branchBorderColor: "#0464a8", - mainBorderColor: "#0464a8", + title: "Bazy danych relacyjne (SQL)", + image: "", //SkillsRelationDbLogo, + branchBorderColor: "#7b00b3", + mainBorderColor: "#1038a7", content: [ - "Ulepszanie bot'a inwestycyjnego pod automatyczne inwestowanie wyzwalane zewnętrznymi wiadomościami / sygnałami (Python / Mexc API / Kucoin API / Telegram API / OpenAI API)", - "Konserwacja inrastruktury (Terrafrom / Azure / Hetzner)", - "Konserwacja infrastruktury mikroserwisowej (Docker / Kubernetes / Helm)", - "Konserwacja serwerów (Linux)", - "Automatyzacja konfiguracji serwerów (Ansible / Kubespray / Bash / Python)", - "Ulepszanie / konserwacja job'ów (Jenkins)", + "MariaDB", + "MySQL", + "PostgreSQL", ], }, { type: "mergeBranchSegment", tabs: 1, - branchBorderColor: "#0464a8", - mainBorderColor: "#0464a8", + branchBorderColor: "#7b00b3", + mainBorderColor: "#1038a7", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Bazy danych dokumentowe (NoSQL)", + image: "", //SkillsDocumentDbLogo, + branchBorderColor: "#047900", + mainBorderColor: "#1038a7", + content: [ + "MongoDB (Klaster rozproszony)", + "ElasticSearch (ElasticSearch / Kibana / Logstash)", + "Redis (Cache / Kolejka zadań)", + "RabbitMQ (Kolejka zadań)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#047900", + mainBorderColor: "#1038a7", + }, + { + type: "workSubSegment", + tabs: 0, + title: "Angielski - Poziom B2", + image: "", //SkillsEnglishLogo, + mainBorderColor: null, + lastElement: true, + content: [], }, { type: "titleSegment", @@ -392,14 +685,14 @@ export const content_pl = [ mainBorderColor: null, content: [ "Blockchain", - "Cryptography", - "Smart Contracts", + "Kryptografia", + "Inteligentne kontrakty", ], }, { type: "workSubSegment", tabs: 0, - title: "Grafika 2D & 3D", + title: "Projektowanie grafiki 2D i 3D", image: "", //InterestsBlenderLogo, branchBorderColor: "#ff7021", mainBorderColor: null, @@ -413,20 +706,21 @@ export const content_pl = [ type: "RODOSegment", title: "", content: "Wyrażam zgodę na przetwarzanie moich danych osobowych dla potrzeb niezbędnych do realizacji procesu rekrutacji zgodnie z Rozporządzeniem Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO)." - } - ] + }, +] export const content_en = [ { type: "generalTitleSegment", title: "Kamil Żuk", image: MePng, + content_language: "en", content: { "E-mail": "zukkamil.44@gmail.com", - "Github": "git.00x097.com/tbs093a", + "Phone": "+48 570 688 112", + "Git": "git.00x097.com/tbs093a", + "DevOps Blog": "blog.00x097.com/", "Education": "Higher / Engineer", - "Place of Residence": "Rzeszów / Poland", - "Date of Birth": "30.06.1997", } }, { @@ -450,12 +744,37 @@ export const content_en = [ { type: "workSubSegment", tabs: 1, - title: "Inside Projects - DevOps Engineer & Python Developer - from 01.11.2024", + title: "Aptiv PLC - DevOps Engineer - from 11.02.2025", + image: WorkAptivLogo, + branchBorderColor: "#000000", + mainBorderColor: "#0464a8", + content: [ + "Pipelines & Jobs maintenance & improvements (Jenkins / Wind River Studio / Python / Bash / GitGerrit)", + "Automtization of manual tasks (Jenkins / Wind River Studio / Python / Bash / GitGerrit)", + "Work with Artifactory & Registry (JFrog)", + "Work with Microservices (Docker / Kubernetes)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#000000", + mainBorderColor: "#0464a8", + }, + { + type: "createBranchSegment", + tabs: 1, + branchBorderColor: "#0464a8", + mainBorderColor: "#0464a8", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Inside Projects - DevOps Engineer & Python Developer - from 01.11.2024 to 11.02.2025", image: WorkSiiLogo, branchBorderColor: "#0464a8", mainBorderColor: "#0464a8", content: [ - "Improving crypto / stock exchange bot for automatic investment triggered by outside messages / signals (Python / Mexc API / Kucoin API / Telegram API / OpenAI API)", "Inrastructure maintenance (Terrafrom / Azure / Hetzner)", "Microservices infrastructure maintenance (Docker / Kubernetes / Helm)", "Servers maintenance (Linux)", @@ -661,30 +980,239 @@ export const content_en = [ { type: "workSubSegment", tabs: 0, - title: "ZSE in Rzeszów / Technical School - IT - from 2013 to 2017", + title: "ZSE in Rzeszów / Technical School - Information Technology - from 2013 to 2017", image: WorkZSELogo, noElements: true, content: [], }, + { + type: "titleSegment", + title: "Other Projects", + }, + { + type: "workSubSegment", + tabs: 0, + title: "DevOps", + image: "", + branchBorderColor: "#04009b", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "K8S Cluster on Bare Metal Servers (Hetzner / Terraform / Kubespray)", + image: "", + branchBorderColor: "#8b0000", + mainBorderColor: "#04009b", + content: [ + "Maintenance of 3 nodes cluster (Hetzner / Terraform / Ansible / Kubespray)", + "K8S objects management (Helm / Terraform)", + "Hosting & Administration & Maintenance of internal & external services (Jenkins / Gitea / Wordpress & Customized Software)", + "Hosting & Administration & Maintenance of databases & Caching solutions (PostgreSQL / MariaDb / Elasticsearch / Redis)", + "Hosting & Administration & Maintenance of storage solutions (Minio)", + "Routine operations automation (Jenkins / Groovy Scripts / Ansible / Bash / Python)", + "Applications exposure to internet (Ingress / Cert-Manager / MetalLB)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#8b0000", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Others", + image: "", + branchBorderColor: "#008b78", + mainBorderColor: "#04009b", + content: [ + "DevOps Blog (Wordpress): https://blog.00x097.com/", + "Linux Auto-Configuration (custom dotfiles integration) (Ansible / Bash / ZSH), repository: https://git.00x097.com/tbs093a/linux.config", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#008b78", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 0, + title: "Programming", + image: "", + branchBorderColor: "#ffd748", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "XGPU - Application for Sharing Distributed GPU Resources for Scheduling & Executing AI Training & 3D Rendering Tasks", + image: "", + branchBorderColor: "#005707", + mainBorderColor: "#ffd748", + content: [ + "Backend based on FastAPI Framework (Python) with REST (Account Management / Objects CRUD) & WebSocket APIs (Tasks Scheduling & Executing & Monitoring)", + "External Worker Script based on Python & Bash - connected to backend via WebSocket", + "External Worker Tasks Scheduling & Executing & Monitoring via WebSocket API", + "External Worker AI Training based on NCCL DDP (Distributed Data Parallel) (PyTorch) & 3D Rendering based on Blender Rendering", + "Database configuration & administration (PostgreSQL / MongoDB)", + "CI/CD pipelines implementation (Jenkins / Groovy Scripts)", + "Frontend based on ReactJS & Gatsby Framework", + "Contenerisation based on Docker (locally) Manifests", + "Contenerisation based on K8S (Bare Metal Servers - Hetzner) Manifests (Ingress / Cert-Manager / Deployments / PV & PVC / etc.)", + "Working with AI Agents Tools (Cursor AI / Copilot)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005707", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "AI Agents Preparation", + image: "", + branchBorderColor: "#005fc5", + mainBorderColor: "#ffd748", + content: [ + "AI Agent for video summarization based on generated transcript via provided URL (Telegram / youtube-transcript.io API / Python / OpenAI API)", + "AI Agent for generate blog content based on provided plan in prompt (Wordpress / Telegram / Python / OpenAI API)", + "AI Agent for crypto & stock market signals interpretation & auto trading (Telegram / Python / OpenAI API / Mexc API / Kucoin API / Binance API)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005fc5", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Others", + image: "", + branchBorderColor: "#008b78", + mainBorderColor: "#ffd748", + content: [ + "Curriculum Vitae (CV) Generator (ReactJS / Gatsby) - example: https://cv.00x097.com/, repository: https://git.00x097.com/tbs093a/curriculum.vitae", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#008b78", + mainBorderColor: "#ffd748", + }, + { + type: "titleSegment", + title: "Courses & Certs", + }, + { + type: "workSubSegment", + tabs: 0, + title: "DevOps", + image: "", + branchBorderColor: "#04009b", + mainBorderColor: null, + firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "Cloud Providers", + image: "", + branchBorderColor: "#005fc5", + mainBorderColor: "#04009b", + content: [ + "AZ-900: Microsoft Azure Fundamentals Exam Prep (Microsoft Certified: Azure Fundamentals) - Scott Duffy (TOGAF® Trainer, Microsoft Azure MVP)", + "AZ-104: Microsoft Azure Administrator Exam Prep (Microsoft Certified: Azure Administrator Associate) - Scott Duffy (TOGAF® Trainer, Microsoft Azure MVP)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#005fc5", + mainBorderColor: "#04009b", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Infrastructure as Code", + image: "", + branchBorderColor: "#7b00ab", + mainBorderColor: "#04009b", + content: [ + "HashiCorp Certified: Terraform Associate - Hands-On Labs - Bryan Krausen (HashiCorp Ambassador) & Gabe Maentz (Authorized HashiCorp Instructor)", + "HashiCorp Certified: Terraform Associate Practice Exam 2025 - Bryan Krausen (HashiCorp Ambassador)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#7b00ab", + mainBorderColor: "#04009b", + }, { type: "titleSegment", title: "Tech Skills", },{ type: "workSubSegment", tabs: 0, - title: "Programming - Python", - image: "", //SkillsPythonLogo, + title: "Programming", + image: "", branchBorderColor: "#ffd748", mainBorderColor: null, firstElement: true, + content: [], + }, + { + type: "workSubSegment", + tabs: 1, + title: "Coding & Scripting", + image: "", + branchBorderColor: "#6d3d00", + mainBorderColor: "#ffd748", content: [ - "Django", - "Django REST Framework", - "Channels 3.0", - "Celery (Task Manager)", - "Asyncio", + "Python", + "Bash / ZSH / Powershell", + "Javascript (Pure JS / ReactJS)", ], }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#6d3d00", + mainBorderColor: "#ffd748", + }, + { + type: "workSubSegment", + tabs: 1, + title: "LLM & Other AI Tools", + image: "", + branchBorderColor: "#8b0000", + mainBorderColor: "#ffd748", + content: [ + "Public LLMs (Claude / Gemini / ChatGPT)", + "Local LLMs (Ollama - Bielik AI / DeepSeek)", + "Coding Agents (Cursor AI / Copilot)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#8b0000", + mainBorderColor: "#ffd748", + }, { type: "workSubSegment", tabs: 0, @@ -702,9 +1230,11 @@ export const content_en = [ mainBorderColor: "#2e8cb1", content: [ "Jenkins (CI/CD / Routine Processes Automatization (Job's) / GitOps)", - "Ansible (Automatization of servers & dev environments configuration)", + "Ansible (Server Configuration Stuffs)", + "Terraform / OpenTofu (Infrastructure as Code)", "Bash / ZSH (Linux)", "Powershell (Windows)", + "Python (Cross-Platform)", ], }, { @@ -713,45 +1243,6 @@ export const content_en = [ branchBorderColor: "#4aa720", mainBorderColor: "#2e8cb1", }, - - { - type: "workSubSegment", - tabs: 1, - title: "Containerization", - image: "", //SkillsContainersLogo, - branchBorderColor: "#00b7ff", - mainBorderColor: "#2e8cb1", - content: [ - "Docker", - "Docker-Compose (Microservices oriented on single servers or debug purposes)", - "MiniKube (Local debugging K8S manifests)", - "Kubernetes (Helm / Cert-Manager / Ingress / K9S)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#00b7ff", - mainBorderColor: "#2e8cb1", - }, - { - type: "workSubSegment", - tabs: 1, - title: "Configuration", - image: "", //SkillsNginxLogo, - branchBorderColor: "#d90000", - mainBorderColor: "#2e8cb1", - content: [ - "Apache", - "Nginx (https-portal)", - ], - }, - { - type: "mergeBranchSegment", - tabs: 1, - branchBorderColor: "#d90000", - mainBorderColor: "#2e8cb1", - }, { type: "workSubSegment", tabs: 1, @@ -763,6 +1254,7 @@ export const content_en = [ "Hetzner", "OVH", "AWS", + "Azure", ], }, { @@ -771,6 +1263,49 @@ export const content_en = [ branchBorderColor: "#f96900", mainBorderColor: "#2e8cb1", }, + { + type: "workSubSegment", + tabs: 1, + title: "Containerization", + image: "", //SkillsContainersLogo, + branchBorderColor: "#00b7ff", + mainBorderColor: "#2e8cb1", + content: [ + "Docker & Docker-Compose", + "Podman", + "Kubernetes (Kubespray / Helm / Cert-Manager / Ingress / K9S)", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#00b7ff", + mainBorderColor: "#2e8cb1", + }, + { + type: "workSubSegment", + tabs: 1, + title: "Reliability & Monitoring", + image: "", + branchBorderColor: "#000000", + mainBorderColor: "#2e8cb1", + content: [ + "Grafana", + "Prometheus", + "ElasticSearch", + "Kibana", + "Logstash", + "New Relic", + "Splunk", + "Fluent-Bit", + ], + }, + { + type: "mergeBranchSegment", + tabs: 1, + branchBorderColor: "#000000", + mainBorderColor: "#2e8cb1", + }, { type: "workSubSegment", tabs: 0, @@ -863,8 +1398,7 @@ export const content_en = [ title: "", content: "I agree to the processing of personal data provided in this document for realising the recruitment process pursuant to the Personal Data Protection Act of 10 May 2018 (Journal of Laws 2018, item 1000) and in agreement with Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation)." }, - ] - +] export default { content_pl, diff --git a/src/images/work_aptiv_logo.png b/src/images/work_aptiv_logo.png new file mode 100644 index 0000000..1bdb399 Binary files /dev/null and b/src/images/work_aptiv_logo.png differ diff --git a/src/pages/index.js b/src/pages/index.js index feeb461..72613f6 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -2,7 +2,89 @@ import * as React from "react" import "../styles/general.scss" import { content_pl } from "../content/kamil" import { content_en } from "../content/kamil" +import { loadCaptchaEnginge, LoadCanvasTemplate, validateCaptcha } from 'react-simple-captcha' +const SimpleCaptchaWrapper = ({ onVerified, language }) => { + const [error, setError] = React.useState(null); + + let content = { + "pl": { + "initial_information": "Wprowadź kod z obrazka aby wyświetlić informacje kontaktowe.", + "captcha_console_initialization": "Błąd inicjalizacji captcha:", + "captcha_ui_initialization": "Nie można załadować captcha", + "captcha_console_reload": "Błąd przeładowania captcha:", + "captcha_reload_button": "Odśwież kod", + "captcha": "Wprowadź kod z obrazka", + "button": "Potwierdź", + "error": "Nieprawidłowy kod. Spróbuj ponownie.", + }, + "en": { + "initial_information": "Please enter the code from the image for display contact information.", + "captcha_console_initialization": "Captcha initialization error:", + "captcha_ui_initialization": "Cannot load captcha", + "captcha_console_reload": "Captcha reload error:", + "captcha_reload_button": "Reload code", + "captcha": "Enter the code from the image", + "button": "Confirm", + "error": "Invalid code. Try again.", + } + } + + React.useEffect(() => { + try { + loadCaptchaEnginge(6, '#242424', '#a6a6a6'); + } catch (err) { + console.error(content[language].captcha_console_initialization, err); + setError(content[language].captcha_ui_initialization); + } + }, []); + + const handleSubmit = (e) => { + e.preventDefault(); + const userCaptchaValue = document.getElementById('user_captcha_input').value; + + if (validateCaptcha(userCaptchaValue)) { + onVerified(true); + setError(null); + } else { + setError(content[language].error); + document.getElementById('user_captcha_input').value = ""; + // Przeładowanie captcha + try { + loadCaptchaEnginge(6, '#242424', '#a6a6a6'); + } catch (err) { + console.error(content[language].captcha_console_reload, err); + } + } + }; + + return ( +
+ {content[language].initial_information} +
+