/* global React */ const { useState, useEffect } = React; /* ============================================================ TIMELINE / EXPERIENCE Companies are top-level; phases (e.g. multiple roles at one company) nest as sub-rows inside the expanded view. ============================================================ */ const EXPERIENCE = [ { id: "metso", period: "06.2024 — Now", co: "Metso", loc: "Krakow, Poland", role: "Senior Software Engineer & Product Owner", detailMeta: "Industrial Digital Twin · 3 phases", summary:

Joined as a Full-stack Developer on a digital-twin platform for the minerals processing industry; promoted into Feature Owner and now a dual Senior Software Engineer + Product Owner role. Three roles, one mission.

, tags: [".NET 9", "C# 13", "React 18", "Microsoft Orleans", "Azure", "Terraform", "DataDog", "Digital Twin", "AI-native"], now: true, phases: [ { period: "Feb 2026 — Now", duration: "4 mos", role: "Senior Software Engineer & Product Owner", meta: "Dual role · NOW", now: true, body: <>

Acting in a dual role as Product Owner while remaining hands-on as a Senior Software Engineer. Leading end-to-end development and delivery of the digital-twin solution with .NET, React, and Microsoft Azure.

Driving an AI-native development approach — embedding intelligent capabilities for advanced analytics, automation, and data-driven decision-making. Defining high-level architecture, shaping technical direction, and bridging engineering with product through roadmap planning, requirements, and stakeholder collaboration.

}, { period: "Dec 2025 — Now", duration: "6 mos", role: "Feature Owner", meta: "Concurrent", body: <>

Feature Owner of the Digital Twin product. Managing a development team, communicating with business and stakeholders, and creating development plans and feature roadmaps aligned to quarterly objectives.

Backlog ownership, scope definition, requirements clarification. Coordinating delivery, presenting Digital Twin demonstrations, and ensuring alignment with Metso's product strategy and digitalization goals.

}, { period: "06.2024 — 12.2025", duration: "1.5 yrs", role: "Full-stack Software Developer", meta: "IC track", body: <>

Building distributed services in C# 13 / .NET 9 with Microsoft Orleans, shaping the React 18 UI on top, and migrating legacy VM workloads to Azure with Terraform-managed infrastructure.

Stood up service & infra observability with DataDog, set up CI/CD on GitHub Actions, and contributed to architectural decisions across the squad.

}] }, { id: "siemens", period: "06.2022 — 05.2024", co: "Siemens DISW", loc: "Katowice, Poland", role: ".NET Developer", detailMeta: "Enterprise software · AWS", body: <>

Built back-end APIs in C# / .NET for industry-leading EDA tooling. Applied functional C# for scalable solutions and integrated multiple third-party services.

Owned GitLab CI/CD pipelines and managed cloud infrastructure on AWS with IaC. Drove security & compliance, set up service observability, and participated in the full lifecycle of product development.

, tags: [".NET", "C# Functional", "GitLab CI/CD", "AWS", "IaC", "Observability", "Security & compliance"] }, { id: "autocab", period: "04.2020 — 05.2022", co: "Autocab Ltd (an Uber company)", loc: "Stockport, England", role: "Software Developer", detailMeta: "Mobility platform · .NET + Angular", body: <>

Developed REST APIs in ASP.NET / ASP.NET Core and integrated them into Angular UIs. Designed and managed MS SQL and MongoDB databases, maintaining a long tail of legacy ASP.NET projects alongside greenfield work.

Built server logic for a new food-delivery product for taxi companies, owned production deployments, and authored technical documentation for the platform's APIs.

, tags: ["ASP.NET Core", "Angular", "MS SQL", "MongoDB", "Legacy modernisation", "Production deploys"] }, { id: "csi", period: "09.2019 — 04.2020", co: "CSI Media", loc: "Crewe, England", role: "Junior Web Developer", detailMeta: "Agency · Microservices", body: <>

Built web applications in ASP.NET / ASP.NET Core, maintained and extended microservices, and worked across MVC and MVVM architectural patterns with several ORM frameworks.

, tags: ["ASP.NET", "Microservices", "MVC", "MVVM", "ORMs"] }, { id: "tribal", period: "02.2019 — 07.2019", co: "Tribal Group", loc: "Swansea, Wales", role: "Support Consultant", detailMeta: "Dynamics 365 · First role", body: <>

Provided support to Dynamics 365 customers and deployed software to customer sites — first taste of professional software delivery alongside finishing my BSc.

, tags: ["Dynamics 365", "Customer support", "Deployments"] }]; function PhaseRow({ phase, idx, total, isOpen, onToggle }) { return (
{e.stopPropagation();onToggle(idx);}}>
{phase.period} · {phase.duration}

{phase.role}

{phase.meta}
{phase.body}
); } function TimelineRow({ entry, open, onToggle }) { // All phases open by default — recruiters/hiring-managers can scan everything at once. const [openPhases, setOpenPhases] = useState( () => new Set(entry.phases ? entry.phases.map((_, i) => i) : []) ); const togglePhase = (i) => { setOpenPhases((prev) => { const next = new Set(prev); if (next.has(i)) next.delete(i);else next.add(i); return next; }); }; const hasPhases = !!entry.phases; return (
{if (e.key === "Enter" || e.key === " ") {e.preventDefault();onToggle();}}}>
{entry.period} {entry.now && NOW} {hasPhases &&
{entry.phases.length} roles
}

{entry.role}

{entry.co} · {entry.loc}
{entry.detailMeta}
{entry.summary || entry.body} {hasPhases &&
{entry.phases.map((p, i) => )}
}
{entry.tags.map((t) => {t})}
); } function TimelineSection() { const [openIdx, setOpenIdx] = useState(0); return (
02 / Work

A career of shipping, credibly.

Click any row to expand. Companies with multiple roles unfold as a sub-timeline.

{EXPERIENCE.map((e, i) => setOpenIdx(openIdx === i ? -1 : i)} /> )}
); } /* ============================================================ EDUCATION · British universities ============================================================ */ const SCHOOLS = [ { id: "manchester", wordmark: "MANCHESTER", sub: "The University of", crestText: "UoM", color: "#6A2C91", // Eminence purple — official Manchester brand colorSoft: "rgba(106, 44, 145, 0.14)", motto: "Cognitio · Sapientia · Humanitas", city: "Manchester · England", flag: "🏴󠁧󠁢󠁥󠁮󠁧󠁿", degree: "MSc — Advanced Computer Science", classification: "Distinction", years: "2019 — 2020", russell: true, bullets: [ "Russell Group · ranked top-30 globally", "Thesis: IoT data pipelines + Natural Language interfaces", "Distributed systems · Machine learning · HCI"] }, { id: "swansea", wordmark: "SWANSEA", wordmark2: "UNIVERSITY", sub: "Prifysgol Abertawe", crestText: "SU", color: "#9E1B32", // Swansea / Welsh red colorSoft: "rgba(158, 27, 50, 0.14)", motto: "Gweithio dros Wybodaeth · Working for Knowledge", city: "Swansea · Wales", flag: "🏴󠁧󠁢󠁷󠁬󠁳󠁿", degree: "BSc (Hons) — Software Engineering", classification: "First Class Honours", years: "2016 — 2019", russell: false, bullets: [ "Founded 1920 · cornerstone laid by King George V", "Thesis: OpenCV-based document scanner", "Software architecture · Algorithms · Web systems"] }]; function EducationSection() { return (
03 / Education

British-university trained.

Five years on UK campuses — first in Wales, then a Russell-Group MSc with Distinction in Manchester. British academic rigour underwrites every line of code I ship.

Educated in the United Kingdom · 2016 – 2020
{SCHOOLS.map((s) =>
{s.years}
{s.russell &&
RUSSELL GROUP
}
{s.sub}
{s.wordmark}
{s.wordmark2 &&
{s.wordmark2}
}
{s.motto}
{s.flag} {s.city}
{s.degree}
{s.classification}
    {s.bullets.map((b, i) =>
  • {b}
  • )}
)}
Certifications
Microsoft · 2025 — 2026
{[ { title: "Microsoft Certified: Azure Fundamentals", code: "AZ-900", issuer: "Microsoft", issued: "Jan 2026" }, { title: "Essentials with Azure Fundamentals", code: "Microsoft Learn", issuer: "Microsoft", issued: "Nov 2025" } ].map((c, i) => (
{c.issuer}
{c.title}
{c.code} · Issued {c.issued}
))}
); } /* ============================================================ ABOUT ============================================================ */ function AboutSection() { return (
04 / About

Two roles, one mindset.

I'm Marcin Kolber — a .NET & React engineer who builds the thing and owns the why. British-universities graduate (MSc Distinction, Manchester) now shipping distributed systems out of Kraków.

I split my week between writing .NET and React and being the Product Owner who decides what gets written. Same person on both sides of the refinement table — fewer translation losses, sharper backlog.

I'm at my best on small, senior teams shipping into a real domain — industrial IoT, mobility, EDA, anything where correctness matters and stakeholders are demanding. I prefer written-first comms, short feedback loops, and roadmaps that survive contact with reality.

Marcin Kolber
MARCIN KOLBER · 2026
Quick facts
  • BasedKraków, Poland
  • Time-zoneCET / UTC+1
  • LanguagesPL (native) · EN (C2)
  • ModesOn-site · Hybrid · Remote
  • Emailmarcin.kolber1@gmail.com
); } /* ============================================================ NOW ============================================================ */ function NowSection() { const items = [ { tag: "Exploring", title: "Probabilistic, data-driven selection", body: "Designing and implementing a probabilistic, data-driven selection mechanism — moving the platform from deterministic rules to evidence-weighted decisions." }, { tag: "Driving", title: "AI tools across the software team", body: "Embedding AI-assisted development into the team's daily loop — Copilot, Claude, AI integration tools — codifying patterns, reviewing outputs, keeping judgement human." }, { tag: "Improving", title: "Digital twin & simulation platform", body: "Constant improvement and enhancement of the digital-twin and simulation platform — performance, accuracy, scalability, and the developer experience around it." }]; return (
05 / Now

What I'm doing this quarter.

Updated May 2026

{items.map((it, i) =>
{it.tag}

{it.title}

{it.body}

)}
); } /* ============================================================ FOOTER ============================================================ */ function Footer() { return ( ); } Object.assign(window, { TimelineSection, EducationSection, AboutSection, NowSection, Footer });