<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Roland Fetscher</title>
<meta name="description" content="Engineering leader who bridges strategic vision and hands-on execution to move organizations forward.">

<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="favicon.svg">

<!-- Canonical -->
<link rel="canonical" href="https://rolandfetscher.com">

<!-- Font preload -->
<link rel="preload" href="fonts/space-grotesk-latin.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="fonts/space-mono-700-latin.woff2" as="font" type="font/woff2" crossorigin>

<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://rolandfetscher.com">
<meta property="og:title" content="Roland Fetscher">
<meta property="og:description" content="Engineering leader who bridges strategic vision and hands-on execution to move organizations forward.">
<meta property="og:image" content="https://rolandfetscher.com/uploads/Portrait%20Roland%20Fetscher.jpeg">
<meta property="og:locale" content="en_US">

<!-- Twitter / LinkedIn card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Roland Fetscher">
<meta name="twitter:description" content="Engineering leader who bridges strategic vision and hands-on execution to move organizations forward.">
<meta name="twitter:image" content="https://rolandfetscher.com/uploads/Portrait%20Roland%20Fetscher.jpeg">
<!-- Structured data -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Roland Fetscher",
  "url": "https://rolandfetscher.com",
  "email": "info@rolandfetscher.com",
  "jobTitle": "Program Manager Platforms",
  "description": "Engineering leader who bridges strategic vision and hands-on execution to move organizations forward.",
  "sameAs": [
    "https://www.linkedin.com/in/rolandfetscher/",
    "https://github.com/roland-fe"
  ]
}
</script>

<style>
  @font-face {
    font-family: 'Space Grotesk';
    font-style: normal;
    font-weight: 300 700;
    font-display: swap;
    src: url('fonts/space-grotesk-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  }
  @font-face {
    font-family: 'Space Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('fonts/space-mono-400-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  }
  @font-face {
    font-family: 'Space Mono';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('fonts/space-mono-700-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  }
</style>

<style>
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  :root {
    --black: #0d0d0d;
    --white: #f7f6f3;
    --mid: #555;
  }

  html { scroll-behavior: smooth; }

  body {
    background: var(--white);
    color: var(--black);
    font-family: 'Space Grotesk', sans-serif;
    font-size: 16px;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
  }

  /* ── NAV ── */
  nav {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 100;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 48px;
    mix-blend-mode: difference;
  }

  .nav-logo {
    font-family: 'Space Mono', monospace;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: #fff;
    text-decoration: none;
  }

  .nav-links {
    display: flex;
    gap: 36px;
    list-style: none;
  }

  .nav-links a {
    font-family: 'Space Mono', monospace;
    font-size: 11px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #fff;
    text-decoration: none;
    opacity: 0.7;
    transition: opacity 0.2s;
  }

  .nav-links a:hover { opacity: 1; }

  /* ── HERO ── */
  #hero {
    position: relative;
    height: 100vh;
    background: var(--black);
    overflow: hidden;
    display: flex;
    align-items: flex-end;
  }

  #pattern-canvas {
    position: absolute;
    top: 0; left: 0;
    width: 100%; height: 100%;
    pointer-events: none;
  }

  #hero::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(to right, rgba(13,13,13,0.3) 40%, transparent 100%);
    pointer-events: none;
    z-index: 1;
  }

  .hero-content {
    position: relative;
    z-index: 2;
    width: 100%;
    display: flex;
    align-items: flex-end;
    padding: 0 48px 72px;
    min-height: 100vh;
  }

  .hero-text {
    display: flex;
    flex-direction: column;
    gap: 28px;
    max-width: 780px;
  }

  .hero-eyebrow {
    font-family: 'Space Mono', monospace;
    font-size: 13px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: rgba(255,255,255,0.4);
  }

  .hero-name {
    font-family: 'Space Grotesk', sans-serif;
    font-weight: 700;
    font-size: clamp(56px, 8vw, 110px);
    line-height: 0.92;
    color: #fff;
    letter-spacing: -0.03em;
    text-transform: uppercase;
  }

  .hero-headline {
    font-size: clamp(16px, 1.4vw, 20px);
    font-weight: 300;
    color: rgba(255,255,255,0.6);
    max-width: 460px;
    line-height: 1.55;
  }

  .hero-scroll {
    font-family: 'Space Mono', monospace;
    font-size: 13px;
    letter-spacing: 0.16em;
    color: rgba(255,255,255,0.3);
    text-transform: uppercase;
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 12px;
  }

  .hero-scroll::before {
    content: '';
    display: block;
    width: 32px;
    height: 1px;
    background: rgba(255,255,255,0.3);
  }

  /* ── ABOUT ── */
  #about {
    padding: 120px 48px;
    max-width: 1200px;
    margin: 0 auto;
    display: grid;
    grid-template-columns: 200px 1fr 260px;
    gap: 60px;
    align-items: start;
  }

  .about-portrait {
    grid-column: 3;
    grid-row: 1;
  }

  .about-portrait picture {
    display: block;
    width: 100%;
  }

  .about-portrait img {
    width: 100%;
    height: auto;
    display: block;
    filter: grayscale(100%) contrast(1.08);
    object-fit: cover;
    object-position: center 15%;
  }

  .section-label {
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--mid);
    padding-top: 6px;
  }

  .about-body { display: flex; flex-direction: column; gap: 32px; }

  .about-lead {
    font-size: clamp(22px, 2.5vw, 32px);
    font-weight: 500;
    line-height: 1.3;
    letter-spacing: -0.02em;
    color: var(--black);
    max-width: 700px;
  }

  .about-text {
    font-size: 17px;
    line-height: 1.7;
    color: #444;
    max-width: 620px;
  }

  .skills {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding-top: 8px;
  }

  .skill-tag {
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    padding: 7px 14px;
    border: 1px solid #ccc;
    color: var(--mid);
    transition: border-color 0.2s, color 0.2s;
    cursor: default;
  }

  .skill-tag:hover { border-color: var(--black); color: var(--black); }

  .divider {
    height: 1px;
    background: #e0ddd8;
    margin: 0 48px;
  }

  /* ── EXPERIENCE ── */
  #experience {
    padding: 100px 48px;
    max-width: 1200px;
    margin: 0 auto;
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 80px;
  }

  .experience-list {
    display: flex;
    flex-direction: column;
  }

  .exp-row {
    display: flex;
    align-items: baseline;
    gap: 32px;
    padding: 20px 0;
    border-bottom: 1px solid #e0ddd8;
  }

  .exp-row:first-child { border-top: 1px solid #e0ddd8; }

  .exp-company {
    font-family: 'Space Mono', monospace;
    font-size: 11px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--mid);
    min-width: 160px;
  }

  .exp-role {
    font-size: 18px;
    font-weight: 500;
    color: var(--black);
    letter-spacing: -0.01em;
  }

  /* ── CONTACT ── */
  #contact {
    padding: 100px 48px 120px;
    max-width: 1200px;
    margin: 0 auto;
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 80px;
  }

  .contact-body { display: flex; flex-direction: column; gap: 40px; }

  .contact-line {
    font-size: clamp(28px, 4vw, 52px);
    font-weight: 600;
    letter-spacing: -0.025em;
    color: var(--black);
    line-height: 1.1;
  }

  .contact-links {
    display: flex;
    gap: 32px;
    align-items: center;
  }

  .contact-link {
    font-family: 'Space Mono', monospace;
    font-size: 12px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--black);
    text-decoration: none;
    display: flex;
    align-items: center;
    gap: 8px;
    border-bottom: 1px solid transparent;
    padding-bottom: 2px;
    transition: border-color 0.2s;
  }

  .contact-link:hover { border-color: var(--black); }

  footer {
    padding: 28px 48px;
    border-top: 1px solid #e0ddd8;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }

  footer span {
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    color: #aaa;
    letter-spacing: 0.08em;
  }

  .footer-legal {
    display: flex;
    gap: 20px;
  }

  .footer-legal button {
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    color: #ccc;
    letter-spacing: 0.08em;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    transition: color 0.2s;
  }

  .footer-legal button:hover { color: #888; }

  /* ── MODALS ── */
  .modal-overlay {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 200;
    background: rgba(13,13,13,0.6);
    backdrop-filter: blur(4px);
    justify-content: center;
    align-items: center;
    padding: 24px;
  }

  .modal-overlay.open { display: flex; }

  .modal {
    background: var(--white);
    max-width: 560px;
    width: 100%;
    max-height: 80vh;
    overflow-y: auto;
    padding: 48px;
    position: relative;
  }

  .modal-close {
    position: absolute;
    top: 20px; right: 24px;
    background: none;
    border: none;
    font-size: 18px;
    color: #aaa;
    cursor: pointer;
    line-height: 1;
  }

  .modal-close:hover { color: var(--black); }

  .modal h2 {
    font-family: 'Space Mono', monospace;
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--mid);
    margin-bottom: 32px;
  }

  .modal h3 {
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--black);
    margin: 28px 0 8px;
  }

  .modal p, .modal address {
    font-size: 14px;
    line-height: 1.7;
    color: #555;
    font-style: normal;
  }

  .modal a { color: var(--black); }

  /* ── RESPONSIVE ── */
  @media (max-width: 768px) {
    nav { padding: 18px 24px; }
    .nav-links { display: none; }
    #hero { height: auto; min-height: 100svh; }
    .hero-content { padding: 0 24px 56px; min-height: auto; }
    #about { grid-template-columns: 1fr; gap: 24px; padding: 72px 24px; }
    #experience { grid-template-columns: 1fr; gap: 24px; padding: 72px 24px; }
    .exp-company { min-width: 120px; }
    .exp-role { font-size: 16px; }
    .about-portrait { grid-column: 1; grid-row: auto; max-width: 200px; }
    #contact { grid-template-columns: 1fr; gap: 24px; padding: 72px 24px; }
    .divider { margin: 0 24px; }
    footer { padding: 24px; flex-direction: column; gap: 8px; }
    .contact-links { flex-direction: column; align-items: flex-start; gap: 16px; }
  }
</style>
</head>
<body>

<nav>
  <a href="#" class="nav-logo">RF</a>
  <ul class="nav-links">
    <li><a href="#about">About</a></li>
    <li><a href="#experience">Experience</a></li>
    <li><a href="#contact">Contact</a></li>
  </ul>
</nav>

<section id="hero">
  <canvas id="pattern-canvas"></canvas>
  <div class="hero-content">
    <div class="hero-text">
      <span class="hero-eyebrow">Engineering Leader · rolandfetscher.com</span>
      <h1 class="hero-name">Roland<br>Fetscher</h1>
      <p class="hero-headline">Engineering leader who bridges strategic vision and hands-on execution to move organizations forward.</p>
      <span class="hero-scroll">Scroll to explore</span>
    </div>
  </div>
</section>

<section id="about">
  <div class="section-label">About</div>
  <div class="about-body">
    <p class="about-lead">Senior IT leader with deep expertise in cloud platforms, DevOps transformation, and security operations.</p>
    <p class="about-text">I help organizations navigate complex technology landscapes — from building resilient cloud platforms and automating infrastructure at scale, to establishing DevSecOps practices that don't slow teams down. I believe the best engineering leaders are those who can operate at both the strategic and technical level.</p>
    <div class="skills">
      <span class="skill-tag">AI</span>
      <span class="skill-tag">Cloud</span>
      <span class="skill-tag">DevOps</span>
      <span class="skill-tag">Platforms</span>
      <span class="skill-tag">SecOps</span>
      <span class="skill-tag">Leadership</span>
      <span class="skill-tag">Strategy</span>
      <span class="skill-tag">Infrastructure</span>
      <span class="skill-tag">Automation</span>
    </div>
  </div>
  <div class="about-portrait">
    <picture>
      <source srcset="uploads/Portrait%20Roland%20Fetscher.webp" type="image/webp">
      <img src="uploads/Portrait%20Roland%20Fetscher.jpeg" alt="Roland Fetscher" width="726" height="991" loading="lazy">
    </picture>
  </div>
</section>

<div class="divider"></div>

<section id="experience">
  <div class="section-label">Experience</div>
  <div class="experience-list">
    <div class="exp-row">
      <span class="exp-company">Müller</span>
      <span class="exp-role">Program Manager Platforms</span>
    </div>
    <div class="exp-row">
      <span class="exp-company">LBBW</span>
      <span class="exp-role">Group Manager Software Engineering &amp; Secure Development</span>
    </div>
    <div class="exp-row">
      <span class="exp-company">LBBW</span>
      <span class="exp-role">Head of DevEx</span>
    </div>
    <div class="exp-row">
      <span class="exp-company">Mercedes-Benz</span>
      <span class="exp-role">Platform Architect</span>
    </div>
    <div class="exp-row">
      <span class="exp-company">Atos</span>
      <span class="exp-role">Infrastructure Consultant</span>
    </div>
  </div>
</section>

<div class="divider"></div>

<section id="contact">
  <div class="section-label">Contact</div>
  <div class="contact-body">
    <h2 class="contact-line">Let's connect.</h2>
    <div class="contact-links">
      <a href="https://www.linkedin.com/in/rolandfetscher/" class="contact-link" target="_blank" rel="noopener">LinkedIn ↗</a>
      <a href="https://github.com/roland-fe" class="contact-link" target="_blank" rel="noopener">GitHub ↗</a>
      <a href="mailto:info@rolandfetscher.com" class="contact-link">Mail ↗</a>
    </div>
  </div>
</section>

<footer>
  <span>© 2026 Roland Fetscher</span>
  <div class="footer-legal">
    <button onclick="document.getElementById('modal-impressum').classList.add('open')">Impressum</button>
    <button onclick="document.getElementById('modal-datenschutz').classList.add('open')">Datenschutz</button>
  </div>
</footer>

<!-- Impressum -->
<div class="modal-overlay" id="modal-impressum">
  <div class="modal">
    <button class="modal-close" onclick="document.getElementById('modal-impressum').classList.remove('open')">✕</button>
    <h2>Impressum</h2>
    <h3>Angaben gemäß § 5 TMG</h3>
    <address>
      Roland Fetscher<br>
      Deutschland
    </address>
    <h3>Kontakt</h3>
    <p><a href="mailto:info@rolandfetscher.com">info@rolandfetscher.com</a></p>
    <h3>Verantwortlich für den Inhalt</h3>
    <p>Roland Fetscher</p>
  </div>
</div>

<!-- Datenschutzerklärung -->
<div class="modal-overlay" id="modal-datenschutz">
  <div class="modal">
    <button class="modal-close" onclick="document.getElementById('modal-datenschutz').classList.remove('open')">✕</button>
    <h2>Datenschutzerklärung</h2>
    <h3>Verantwortlicher</h3>
    <p>Roland Fetscher · <a href="mailto:info@rolandfetscher.com">info@rolandfetscher.com</a></p>
    <h3>Hosting &amp; Serverdaten</h3>
    <p>Diese Website wird bei netcup GmbH, Daimlerstr. 25, 76185 Karlsruhe gehostet. Beim Aufruf der Website werden automatisch Serverlogdaten erfasst (IP-Adresse, Datum/Uhrzeit, aufgerufene Seite, Browsertyp). Diese Daten werden zur Sicherstellung des Betriebs verarbeitet und nach spätestens 7 Tagen gelöscht. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse).</p>
    <h3>Keine Cookies, kein Tracking</h3>
    <p>Diese Website setzt keine Cookies und verwendet keine Tracking- oder Analysedienste. Es werden keine personenbezogenen Daten an Dritte weitergegeben.</p>
    <h3>Externe Links</h3>
    <p>Diese Website enthält Links zu LinkedIn und GitHub. Beim Klick auf diese Links gelten die Datenschutzbestimmungen der jeweiligen Anbieter.</p>
    <h3>Ihre Rechte</h3>
    <p>Sie haben das Recht auf Auskunft, Berichtigung, Löschung und Einschränkung der Verarbeitung Ihrer personenbezogenen Daten sowie das Recht auf Datenübertragbarkeit. Wenden Sie sich dazu an <a href="mailto:info@rolandfetscher.com">info@rolandfetscher.com</a>. Sie haben zudem das Recht, sich bei einer Datenschutzbehörde zu beschweren.</p>
  </div>
</div>

<script>
(function () {
  var cfg = { size: 36, spacing: 55, opacity: 0.07, variation: true };

  var canvas = document.getElementById('pattern-canvas');
  var hero   = document.getElementById('hero');
  var ctx    = canvas.getContext('2d');
  var WORDS  = ['CLOUD', 'DEVOPS', 'PLATFORMS', 'SECOPS', 'LEADERSHIP', 'STRATEGY'];

  function draw() {
    var W = hero.offsetWidth;
    var H = hero.offsetHeight;
    canvas.width  = W;
    canvas.height = H;
    canvas.style.opacity = cfg.opacity;

    ctx.clearRect(0, 0, W, H);
    ctx.fillStyle = '#ffffff';
    ctx.textBaseline = 'middle';

    var angle   = -Math.PI / 4;
    var diag    = Math.sqrt(W * W + H * H);
    var numRows = Math.ceil(diag / cfg.spacing) + 4;

    // Three alternating row sizes for structured variation
    var sizeScale = [1.0, 0.7, 1.3];

    ctx.save();
    ctx.translate(W / 2, H / 2);
    ctx.rotate(angle);

    for (var i = -numRows; i <= numRows; i++) {
      var rowScale = cfg.variation ? sizeScale[((i % 3) + 3) % 3] : 1.0;
      var size     = cfg.size * rowScale;
      ctx.font     = '700 ' + size + 'px "Space Mono", monospace';

      var y      = i * cfg.spacing;
      var offset = i % 2 === 0 ? 0 : -cfg.spacing * 0.85;
      var x      = -diag * 1.5 + offset;
      var gap    = size * 0.55;
      // start each row at a different word so all words distribute evenly
      var wordCounter = ((i * 3) % WORDS.length + WORDS.length) % WORDS.length;

      while (x < diag * 1.5 + cfg.spacing) {
        var word = WORDS[wordCounter % WORDS.length];
        var w    = ctx.measureText(word).width;
        ctx.fillText(word, x, y);
        x += w + gap;
        wordCounter++;
      }
    }

    ctx.restore();
  }

  document.fonts.ready.then(function () {
    draw();
  });

  window.addEventListener('resize', draw);

  // Close modals on overlay click
  document.querySelectorAll('.modal-overlay').forEach(function(overlay) {
    overlay.addEventListener('click', function(e) {
      if (e.target === overlay) overlay.classList.remove('open');
    });
  });

  // Close modals on Escape
  document.addEventListener('keydown', function(e) {
    if (e.key === 'Escape') {
      document.querySelectorAll('.modal-overlay.open').forEach(function(m) {
        m.classList.remove('open');
      });
    }
  });
})();
</script>

</body>
</html>
