diff --git a/assets/curriculum.html b/assets/curriculum.html new file mode 100644 index 0000000..e5da25b --- /dev/null +++ b/assets/curriculum.html @@ -0,0 +1,582 @@ + + + + + + Dmytro Pishchenkov - CV + + + +
+
+ +
+
+ Dmytro Pishchenkov +
+
+

Platform Engineering / Cloud Ops / DevSecOps

+

Dmytro Pishchenkov

+

+ Software Engineer focused on Kubernetes, cloud infrastructure, + security, and automation +

+ +
+
+ +
+

+ Platform and Cloud Operations Engineer with enterprise experience in + securing, scaling, and optimizing infrastructure across Microsoft, + Cisco, and Splunk environments. I build reliable cloud platforms with + Kubernetes, Terraform, Go, Python, and a security-first mindset shaped + by enterprise cloud support, compliance analysis, and production + operations. +

+
+ +
+ + +
+
+

Enterprise Experience

+
+

Platform Engineering & Cloud Operations - Cisco

+

+ Platform engineering, Kubernetes operators | Nov 2024 - Present +

+
    +
  • + Transitioned to Cisco following the Splunk acquisition, + continuing core platform engineering and Kubernetes operator + initiatives. +
  • +
  • + Extended Cisco/Splunk platform work into Kubernetes + operator development, building higher-level abstractions for + stateful workloads in Go. +
  • +
  • + Focused on PostgreSQL Day-1 and Day-2 lifecycle automation, + using AI-augmented workflows for rapid iteration, boilerplate + generation, and debugging. +
  • +
+
+ +
+

Cloud Operations - Splunk

+

+ Infrastructure automation, observability | Dec 2023 - Nov 2024 +

+
    +
  • + Engineered Terraform and Python automation for a large-scale + AWS RDS fleet upgrade and Intel-to-Graviton migration, a team + initiative that delivered $500k+ in cost optimization. +
  • +
  • + Developed SPL-based observability dashboards and used Splunk + Dynamic Templates (Loki) to track infrastructure state and + lifecycle events across the fleet. +
  • +
+
+ +
+

Microsoft Defender for Cloud Support - LTIMindtree

+

+ Cloud security, DevSecOps support | Apr 2023 - Nov 2023 +

+
    +
  • + Provided advanced support for enterprise cloud environments, + focusing on Cloud Security Posture Management, workload + protection, and complex cloud security incident resolution. +
  • +
  • + Troubleshot security configuration, vulnerability assessment, + and operational reliability issues in production + environments. +
  • +
  • + Translated complex security findings into actionable + engineering guidance for customer and internal stakeholders. +
  • +
+
+ +
+
+
+ +
+

Earlier Experience

+
+

Legal Adviser & Compliance Specialist

+

Private practice / Medpos Ltd. | 2013 - 2022

+
    +
  • + Managed legal analysis, contracts, documentation, and regulatory + compliance work, strengthening the audit-oriented mindset now + applied to DevSecOps and platform engineering. +
  • +
+
+
+ +
+

Selected Projects

+
+

Splunk Operator: PostgreSQL Platform Controllers

+

+ Go, Kubernetes, Operators, PostgreSQL, CloudNativePG, + AI-Augmented Development +

+

+ Engineered core APIs, including PostgresCluster, PostgresDatabase, + and class-based provisioning primitives, to establish a higher-level + PostgreSQL platform layer for Splunk on Kubernetes. Added + CNPG-backed reconciliation and Day-1/Day-2 lifecycle management for + enterprise stateful workloads. +

+ +
+ +
+

Serverless Cloud-Native Web Application

+

Go, GCP Cloud Run, Docker, Firebase, React

+

+ Architected and deployed a multilingual web application with a + Go-based REST API and React frontend. Containerized the backend for + Google Cloud Run, enabling scale-to-zero delivery, and integrated + Firebase for NoSQL-backed state and localization support. +

+ +
+ +
+

Secure Communication Infrastructure

+

+ Go, WebSockets, WebRTC, TURN, AES-GCM, OCI, Terraform +

+

+ Architected a secure real-time communication platform deployed on + OCI and provisioned entirely with Terraform. Built a hardened + deployment path with custom coturn configuration, DTLS fingerprint + verification, ephemeral state cleanup, and AES-GCM payload + encryption. +

+ +
+
+ +
+ + diff --git a/assets/curriculum.pdf b/assets/curriculum.pdf index 72ac9a0..a11b2d6 100644 Binary files a/assets/curriculum.pdf and b/assets/curriculum.pdf differ diff --git a/src/App.jsx b/src/App.jsx index 57af4af..7473e26 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -35,7 +35,6 @@ import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import resumePdf from "../assets/curriculum.pdf"; -import resumePlPdf from "../assets/curriculum_pl.pdf"; import profilePhoto from "../assets/images/me.png"; import { languageThemes, languages, socialLinks } from "./data/profile.js"; @@ -105,7 +104,7 @@ function App() { const skillGroups = t("skills.groups", { returnObjects: true }); const experienceItems = t("experience.items", { returnObjects: true }); const projects = t("projects.items", { returnObjects: true }); - const resumeHref = currentLanguage === "pl" ? resumePlPdf : resumePdf; + const resumeHref = resumePdf; const accentStripe = useMemo( () => @@ -114,6 +113,27 @@ function App() { : `linear-gradient(90deg, ${palette.primary}, ${palette.secondary})`, [currentLanguage, palette], ); + const heroButtonStyles = { + bg: palette.buttonGradient, + border: "1px solid", + borderColor: palette.border, + boxShadow: `${palette.buttonGlow || palette.glow}, inset 0 1px 0 rgba(255, 255, 255, 0.42)`, + color: currentLanguage === "pl" ? palette.text : "white", + fontWeight: "700", + letterSpacing: "0.04em", + textShadow: currentLanguage === "pl" ? "none" : "0 1px 2px rgba(0, 0, 0, 0.34)", + transition: "transform 160ms ease, box-shadow 160ms ease, filter 160ms ease", + _hover: { + boxShadow: `${palette.buttonGlow || palette.glow}, 0 22px 44px rgba(15, 23, 42, 0.16)`, + filter: "saturate(1.08)", + textDecoration: "none", + transform: "translateY(-2px)", + }, + _active: { + boxShadow: palette.buttonGlow || palette.glow, + transform: "translateY(0)", + }, + }; const changeLanguage = (languageCode) => { window.localStorage.setItem("portfolioLanguage", languageCode); @@ -256,22 +276,30 @@ function App() { - - @@ -350,7 +378,7 @@ function App() { const ExperienceIcon = experienceIcons[index] || Briefcase; return (