Tone down hero name, crop new avatar, drop em-dashes
My Gatsby Deployment pipeline / build-and-deploy (push) Successful in 3m46s

Make the name a quiet heading and let the one-line thesis lead the hero.
Replace the portrait with a center-cropped 4:5 version of the new photo
(downscaled 1.2 MB -> 91 KB) and drop the now-pointless grayscale hover.
Remove em-dashes from copy (restructured prose; en-dashes for year ranges;
mid-dot in the page titles).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-28 17:24:10 +02:00
parent 8856e7c273
commit 4525837081
4 changed files with 25 additions and 29 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 91 KiB

+11 -15
View File
@@ -1,5 +1,5 @@
/*
thiessen.io personal site
thiessen.io personal site
Swiss-minimal direction. Display: Space Grotesk · Body: Hanken Grotesk · Mono: Space Mono.
One accent (signal cobalt), used only for links and the live timeline node.
*/
@@ -138,22 +138,22 @@ a { color: inherit; }
.hero__name {
font-family: var(--font-display);
font-weight: 600;
font-size: clamp(3rem, 9.5vw, 7rem);
line-height: 0.92;
letter-spacing: -0.035em;
font-weight: 500;
font-size: clamp(1.5rem, 2.6vw, 1.9rem);
line-height: 1.1;
letter-spacing: -0.005em;
margin: 0;
}
.hero__lead {
font-family: var(--font-display);
font-weight: 400;
font-size: clamp(1.35rem, 2.7vw, 2rem);
line-height: 1.18;
letter-spacing: -0.01em;
font-weight: 500;
font-size: clamp(1.5rem, 3.2vw, 2.35rem);
line-height: 1.16;
letter-spacing: -0.015em;
color: var(--ink);
max-width: 30ch;
margin: 1.75rem 0 0;
max-width: 26ch;
margin: 1rem 0 0;
}
.hero__meta {
@@ -194,12 +194,8 @@ a { color: inherit; }
object-fit: cover;
border-radius: 6px;
border: 1px solid var(--mist);
filter: grayscale(100%) contrast(1.02);
transition: filter 0.4s ease;
}
.portrait img:hover { filter: grayscale(0%); }
/* ---------- profile ---------- */
.prose p {
+1 -1
View File
@@ -7,7 +7,7 @@ const NotFoundPage = () => (
<Layout>
<Helmet>
<html lang="en" />
<title>Not found Dennis Thiessen</title>
<title>Not found · Dennis Thiessen</title>
</Helmet>
<div className="wrap notfound">
<p className="eyebrow">Error 404</p>
+13 -13
View File
@@ -4,26 +4,26 @@ import { Helmet } from 'react-helmet'
import Layout from '../components/layout'
import avatar from '../assets/images/avatar.jpg'
const SITE_TITLE = 'Dennis Thiessen Data, Analytics & AI Engineer'
const SITE_TITLE = 'Dennis Thiessen · Data, Analytics & AI Engineer'
const SITE_DESCRIPTION =
'Dennis Thiessen is a Staff Data, Analytics & AI Engineer in Bern, Switzerland, building the data pipelines and ML infrastructure that production systems run on.'
const EMAIL = 'dennis@thiessen.io'
const LINKEDIN = 'https://www.linkedin.com/in/dennis-thiessen'
// Career as a pipeline most recent first. Each node is a role.
// Career as a pipeline, most recent first. Each node is a role.
const ROLES = [
{
year: '2023 PRESENT',
year: '2023 PRESENT',
company: 'Swisscom',
location: 'Bern, CH',
title: 'Staff Data, Analytics & AI Engineer',
description:
'ETL and streaming pipelines in Python, Kafka and SAP BODS feeding a Teradata warehouse — and migrating the legacy stack onto AWS (Glue, Redshift, Lambda, Step Functions, Airflow).',
'ETL and streaming pipelines in Python, Kafka and SAP BODS feeding a Teradata warehouse, while migrating the legacy stack onto AWS (Glue, Redshift, Lambda, Step Functions, Airflow).',
live: true,
},
{
year: '2020 2023',
year: '2020 2023',
company: 'Bosch Semiconductor',
location: 'Dresden, DE',
title: 'Senior Data Engineer',
@@ -31,7 +31,7 @@ const ROLES = [
'Containerised ML inference (Docker, Kubernetes, Ansible) into 24/7 semiconductor production lines, and built Python, Java and C# data services over Oracle and Hadoop/Impala.',
},
{
year: '2018 2020',
year: '2018 2020',
company: 'Fraunhofer CML',
location: 'Hamburg, DE',
title: 'Research Software Engineer',
@@ -39,7 +39,7 @@ const ROLES = [
'Optimisation-based crew-scheduling decision support in C#/.NET, plus research microservices and a Jenkins CI/CD pipeline with quality gates.',
},
{
year: '2017 2018',
year: '2017 2018',
company: 'Vizrt',
location: 'Bergen, NO',
title: 'DevOps Engineer',
@@ -47,7 +47,7 @@ const ROLES = [
'A distributed video-transcoding backend in Python and C++, with automated audio/video integration testing for reliable releases.',
},
{
year: '2015 2017',
year: '2015 2017',
company: 'Generali',
location: 'Hamburg, DE',
title: 'Software Engineer & IT Consultant',
@@ -105,7 +105,7 @@ const IndexPage = () => (
I build the pipelines and platforms that move data and run models in production.
</p>
<p className="hero__meta">
<strong>Staff Data, Analytics &amp; AI Engineer at Swisscom</strong> based in Bern,
<strong>Staff Data, Analytics &amp; AI Engineer at Swisscom</strong>, based in Bern,
Switzerland, with 8+ years across data engineering, ML infrastructure and DevOps.
</p>
<nav className="actions">
@@ -124,9 +124,9 @@ const IndexPage = () => (
<h2 className="section__label">Profile</h2>
<div className="prose">
<p>
I work where <strong>software engineering meets operations</strong> designing ETL/ELT
and streaming pipelines, containerising ML inference, and turning monolithic data
processes into event-driven, serverless systems.
I work where <strong>software engineering meets operations</strong>. I design ETL/ELT and
streaming pipelines, containerise ML inference, and turn monolithic data processes into
event-driven, serverless systems.
</p>
<p>
Right now I&apos;m at Swisscom in Bern, moving a legacy Teradata and Oracle stack onto
@@ -176,7 +176,7 @@ const IndexPage = () => (
<h2 className="section__label">Contact</h2>
<div>
<p className="contact__intro">
Open to interesting problems in data, ML and platform engineering in Switzerland or
Open to interesting problems in data, ML and platform engineering, in Switzerland or
remote. Email is the fastest way to reach me.
</p>
<a className="contact__email" href={`mailto:${EMAIL}`}>