quiet redesign yo

This commit is contained in:
2026-05-01 15:29:05 +02:00
parent 9832565fbb
commit 3c1dfde620
4 changed files with 123 additions and 49 deletions
+24 -10
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="description" content="GDPR Notice | Veit Heller—Technologist at Large"> <meta name="description" content="GDPR Notice | Veit Heller—Technologist at Large">
@@ -12,6 +12,7 @@
src: url('charter_regular-webfont.woff') format('woff'); src: url('charter_regular-webfont.woff') format('woff');
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
font-display: swap;
} }
html { html {
box-sizing: border-box; box-sizing: border-box;
@@ -25,7 +26,7 @@
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
margin: 0; margin: 0;
background-color: #fafaf3; background-color: #fafaf7;
} }
.main { .main {
max-width: 600px; max-width: 600px;
@@ -37,16 +38,31 @@
font-size: 28px; font-size: 28px;
font-weight: 400; font-weight: 400;
} }
.main h2 {
font-size: 22px;
font-weight: 400;
margin-top: 2em;
}
.main a { .main a {
color: #000; color: #000;
text-decoration: none; text-decoration: none;
border-bottom: 2px solid #d6dde3; border-bottom: 2px solid #d6dde3;
} }
.site-link {
font-size: 16px;
color: #444;
margin-bottom: 0.5em;
}
.site-link a {
border-bottom: none;
color: #444;
}
</style> </style>
<title>GDPR Notice | Veit Heller—Technologist at Large</title> <title>GDPR Notice | Veit Heller—Technologist at Large</title>
</head> </head>
<body> <body>
<div class="main"> <div class="main">
<p class="site-link"><a href="/">← Veit Heller</a></p>
<h1>GDPR Notice</h1> <h1>GDPR Notice</h1>
<p> <p>
This is the personal website of Veit Heller. I will provide a notice that This is the personal website of Veit Heller. I will provide a notice that
@@ -57,12 +73,12 @@
It collects the requesting partys IP address and user agent from the It collects the requesting partys IP address and user agent from the
HTTP request, but does not store them. HTTP request, but does not store them.
</p> </p>
<h2 id="analytics">Web analytics (Plausible)</h2> <h2 id="analytics">Web analytics (Plausible)</h2>
<p> <p>
This site uses <a href="https://plausible.io">Plausible Analytics</a>. Plausible works without cookies This site uses <a href="https://plausible.io">Plausible Analytics</a>. Plausible works without cookies
and without cross-site tracking. No personal data is stored. and without cross-site tracking. No personal data is stored.
</p> </p>
<ul> <ul>
<li><strong>Per pageview captured:</strong> page URL (without query params except common campaign tags), <li><strong>Per pageview captured:</strong> page URL (without query params except common campaign tags),
referrer, and derived browser/OS/device type; city-level location is inferred from the IP.</li> referrer, and derived browser/OS/device type; city-level location is inferred from the IP.</li>
<li><strong>No raw identifiers stored:</strong> Plausible does not store IP addresses or full user-agents. <li><strong>No raw identifiers stored:</strong> Plausible does not store IP addresses or full user-agents.
@@ -75,7 +91,7 @@
<li><strong>Retention:</strong> Only aggregated statistics are kept for as long as the site is active. <li><strong>Retention:</strong> Only aggregated statistics are kept for as long as the site is active.
You can contact me if you have questions regarding this processing.</li> You can contact me if you have questions regarding this processing.</li>
<li><strong>Public stats:</strong> For transparency, I made the statistics publicly available <a href="https://plausible.io/veitheller.de">here</a>.</li> <li><strong>Public stats:</strong> For transparency, I made the statistics publicly available <a href="https://plausible.io/veitheller.de">here</a>.</li>
</ul> </ul>
<p>For any questions or concerns contact:<br/> <p>For any questions or concerns contact:<br/>
Veit Heller<br/> Veit Heller<br/>
Moltkestr. 5<br/> Moltkestr. 5<br/>
@@ -83,9 +99,7 @@
Germany Germany
</p> </p>
<p>Don't know what this is? This is a necessity dictated by European law.</p> <p>Don't know what this is? This is a necessity dictated by European law.</p>
<hr/> <p>See also: <a href="./imprint.html">Imprint</a></p>
<a href="mailto:veit@veitheller.de">Shoot me an e-mail</a><br/>
<a href="./">Head back home</a>
</div> </div>
</body> </body>
</html> </html>
+12 -4
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="description" content="Imprint | Veit Heller—Technologist at Large"> <meta name="description" content="Imprint | Veit Heller—Technologist at Large">
@@ -43,11 +43,21 @@
text-decoration: none; text-decoration: none;
border-bottom: 2px solid #d6dde3; border-bottom: 2px solid #d6dde3;
} }
.site-link {
font-size: 16px;
color: #444;
margin-bottom: 0.5em;
}
.site-link a {
border-bottom: none;
color: #444;
}
</style> </style>
<title>Imprint | Veit Heller—Technologist at Large</title> <title>Imprint | Veit Heller—Technologist at Large</title>
</head> </head>
<body> <body>
<div class="main"> <div class="main">
<p class="site-link"><a href="/">← Veit Heller</a></p>
<h1>Imprint</h1> <h1>Imprint</h1>
<p>Veit Heller<br/> <p>Veit Heller<br/>
Moltkestr. 5<br/> Moltkestr. 5<br/>
@@ -55,9 +65,7 @@
Germany Germany
</p> </p>
<p>Don't know what this is? This is a necessity dictated by German law.</p> <p>Don't know what this is? This is a necessity dictated by German law.</p>
<hr/> <p>See also: <a href="./gdpr_notice.html">GDPR Notice</a></p>
<a href="mailto:veit@veitheller.de">Shoot me an e-mail</a><br/>
<a href="./">Head back home</a>
</div> </div>
</body> </body>
</html> </html>
+1 -4
View File
@@ -135,9 +135,6 @@
.broken-up { .broken-up {
display: block; display: block;
} }
.broken-up li {
list-style: circle;
}
.main h1 { .main h1 {
font-size: 20px; font-size: 20px;
} }
@@ -291,7 +288,7 @@
<ul> <ul>
<li>Community events: travel-only (free if remote)</li> <li>Community events: travel-only (free if remote)</li>
<li>Corporate talks (4560 min): 1,900€–2,400€</li> <li>Corporate talks (4560 min): 1,900€–2,400€</li>
<li>Corporate talks (7590 min): 2,400€-2,800€</li> <li>Corporate talks (7590 min): 2,400€2,800€</li>
<li>Half-day workshop (24h): 2,500€–3,000€</li> <li>Half-day workshop (24h): 2,500€–3,000€</li>
<li>Full-day workshop (68h): 4,200€–4,800€</li> <li>Full-day workshop (68h): 4,200€–4,800€</li>
<li>Prep and post is included</li> <li>Prep and post is included</li>
+72 -17
View File
@@ -35,7 +35,6 @@
font-family: 'charterregular', Georgia, serif; font-family: 'charterregular', Georgia, serif;
font-size: 18px; font-size: 18px;
width: 100vw; width: 100vw;
height: 100vh;
margin: 0; margin: 0;
background-color: #fafaf7; background-color: #fafaf7;
} }
@@ -76,7 +75,7 @@
} }
.main .rule { .main .rule {
border-top: 1px solid #aaa; border-top: 1px solid #aaa;
width: calc(100%-6em); width: calc(100% - 6em);
margin-left: 3em; margin-left: 3em;
margin-right: 3em; margin-right: 3em;
height: 0px; height: 0px;
@@ -118,6 +117,25 @@
color: #000; color: #000;
border-bottom-color: #000; border-bottom-color: #000;
} }
.site-link {
font-size: 16px;
color: #444;
margin-bottom: 0.5em;
}
.site-link a {
border-bottom: none;
color: #444;
}
.legal {
margin-top: 2.5em;
padding-top: 1em;
border-top: 1px solid #d6dde3;
font-size: 14px;
color: #444;
}
.legal a {
margin-right: 1em;
}
@media(max-width: 700px) { @media(max-width: 700px) {
.main h1 { .main h1 {
font-size: 20px; font-size: 20px;
@@ -127,6 +145,7 @@
</head> </head>
<body> <body>
<main class="main"> <main class="main">
<p class="site-link"><a href="/">← Veit Heller</a></p>
<h1>Workshops, Talks, Publications</h1> <h1>Workshops, Talks, Publications</h1>
<p class="description">I speak and write about systems of all shapes and <p class="description">I speak and write about systems of all shapes and
sizes.</p> sizes.</p>
@@ -135,21 +154,21 @@
<input type="radio" name="tab" id="tab-talks" class="tab-input"> <input type="radio" name="tab" id="tab-talks" class="tab-input">
<input type="radio" name="tab" id="tab-publications" class="tab-input"> <input type="radio" name="tab" id="tab-publications" class="tab-input">
<nav class="tabs"> <nav class="tabs" role="tablist">
<label for="tab-bookable">Bookable</label> <label for="tab-bookable" id="label-bookable" role="tab" aria-controls="bookable" tabindex="0">Bookable</label>
<label for="tab-talks">Talks</label> <label for="tab-talks" id="label-talks" role="tab" aria-controls="talks" tabindex="0">Talks</label>
<label for="tab-publications">Publications</label> <label for="tab-publications" id="label-publications" role="tab" aria-controls="publications" tabindex="0">Publications</label>
</nav> </nav>
<section id="bookable" class="panel"> <section id="bookable" class="panel" role="tabpanel" aria-labelledby="label-bookable">
<h3>Practical threat modelling for engineering teams</h3> <h3>Practical threat modelling for engineering teams</h3>
<p>Lightweight, repeatable threat modelling you can actually run in sprint cadence. We cut jargon, pick a fit-for-purpose method, and get to work quickly. <a href="https://blog.veitheller.de/Threat_Modeling_For_the_Rest_of_Us.html">Read about it here.</a></p> <p>Lightweight, repeatable threat modelling you can actually run in sprint cadence. We cut jargon, pick a fit-for-purpose method, and get to work quickly. <a href="https://blog.veitheller.de/Threat_Modeling_For_the_Rest_of_Us.html">Read about it here.</a></p>
<ul> <ul>
<li><strong>Takeaways:</strong> initial model (only for workshops), playbook, templates, 30-day plan to make it stick.</li> <li><strong>Takeaways:</strong> initial model (only for workshops), playbook, templates, 30-day plan to make it stick.</li>
<li><strong>Formats:</strong> 4590min talk, ~3h half-day (guided exercise), 68h full-day (hands-on)</li> <li><strong>Formats:</strong> 4590min talk, ~3h half-day, 68h full-day (hands-on)</li>
</ul> </ul>
<p><a href="mailto:veit@veitheller.de?subject=threat modelling workshop inquiry">Book this workshop</a></p> <p><a href="mailto:veit@veitheller.de?subject=Threat modelling workshop inquiry">Book this workshop</a></p>
<div class="rule"></div> <div class="rule"></div>
@@ -159,7 +178,7 @@
<li><strong>Takeaways:</strong> control set, CI/CD hooks for evidence (workshop only), audit-ready checklists.</li> <li><strong>Takeaways:</strong> control set, CI/CD hooks for evidence (workshop only), audit-ready checklists.</li>
<li><strong>Formats:</strong> 4590min talk, ~3h half-day, 68h full-day (hands-on)</li> <li><strong>Formats:</strong> 4590min talk, ~3h half-day, 68h full-day (hands-on)</li>
</ul> </ul>
<p><a href="mailto:veit@veitheller.de?subject=isms and ssdlc workshop inquiry">Book this workshop</a></p> <p><a href="mailto:veit@veitheller.de?subject=ISMS and SSDLC workshop inquiry">Book this workshop</a></p>
<div class="rule"></div> <div class="rule"></div>
@@ -167,9 +186,9 @@
<p>What VCs, acquirers, and enterprise buyers actually check, and how to be ready to answer. Architecture narrative, risk posture, and processes that actually give you something in return. <a href="https://blog.veitheller.de/What_good_looks_like_in_a_data_room.html">Read about it here.</a></p> <p>What VCs, acquirers, and enterprise buyers actually check, and how to be ready to answer. Architecture narrative, risk posture, and processes that actually give you something in return. <a href="https://blog.veitheller.de/What_good_looks_like_in_a_data_room.html">Read about it here.</a></p>
<ul> <ul>
<li><strong>Takeaways:</strong> a DD checklist, a clean architecture one-pager, a 30-day prep plan including process refinements (workshop only).</li> <li><strong>Takeaways:</strong> a DD checklist, a clean architecture one-pager, a 30-day prep plan including process refinements (workshop only).</li>
<li><strong>Formats:</strong> 4590min talk, ~3h workshop, 6-8h full-day (hands on)</li> <li><strong>Formats:</strong> 4590min talk, ~3h half-day, 68h full-day (hands-on)</li>
</ul> </ul>
<p><a href="mailto:veit@veitheller.de?subject=funding and buyer readiness workshop inquiry">Book this workshop</a></p> <p><a href="mailto:veit@veitheller.de?subject=Funding and buyer readiness workshop inquiry">Book this workshop</a></p>
<div class="rule"></div> <div class="rule"></div>
@@ -177,17 +196,17 @@
</section> </section>
<section id="talks" class="panel"> <section id="talks" class="panel" role="tabpanel" aria-labelledby="label-talks">
<article> <article>
<h3><i>Upcoming:</i> Type Systems You Might Not Know (But Will Love)</h3> <h3><i>Upcoming:</i> Type Systems You Might Not Know (But Will Love)</h3>
<p><em>WeAreDevelopers World Congress Europe, 2026</em><br> <p><em>WeAreDevelopers World Congress Europe, 2026</em><br>
<p>A tour through beautiful but lesser-known type systems.</p> A tour through beautiful but lesser-known type systems.</p>
</article> </article>
<article> <article>
<h3>Von der Cloud ins Rack Wie Netzautomatisierung souveräne RZ-Umgebungen ermöglicht</h3> <h3>Von der Cloud ins Rack Wie Netzautomatisierung souveräne RZ-Umgebungen ermöglicht</h3>
<p><em>Rack & Stack 2026</em><br> <p><em>Rack & Stack 2026</em><br>
<p>A German talk on high fidelity network automation to drive the adoption of sovereign data infrastructure.</p> A German talk on high fidelity network automation to drive the adoption of sovereign data infrastructure.</p>
<p><i>Recording pending</i></p> <p><i>Recording pending</i></p>
</article> </article>
@@ -230,7 +249,7 @@
<h3>Brainfuck, Carp, Macros, and Futamura Projections</h3> <h3>Brainfuck, Carp, Macros, and Futamura Projections</h3>
<p><em>LambdaLounge, 2021</em><br> <p><em>LambdaLounge, 2021</em><br>
A technical presentation connecting minimal languages, metaprogramming, and interpreter folding techniques.</p> A technical presentation connecting minimal languages, metaprogramming, and interpreter folding techniques.</p>
<p><a href="https://www.youtube.com/watch?v=G-0Vic9fQU0">Watch →</a></p> <p><a href="https://www.youtube.com/watch?v=wwwa5TG70UA">Watch →</a></p>
</article> </article>
<article> <article>
@@ -269,7 +288,7 @@
</article> </article>
</section> </section>
<section id="publications" class="panel"> <section id="publications" class="panel" role="tabpanel" aria-labelledby="label-publications">
<article> <article>
<h3>Efficient Module-Level Dynamic Analysis for Dynamic Languages with Module Recontextualization</h3> <h3>Efficient Module-Level Dynamic Analysis for Dynamic Languages with Module Recontextualization</h3>
@@ -285,6 +304,42 @@
<p><a href="https://sigbovik.org/2019/proceedings.pdf">Read →</a></p> <p><a href="https://sigbovik.org/2019/proceedings.pdf">Read →</a></p>
</article> </article>
</section> </section>
<footer class="legal">
<a href="./imprint.html">Imprint</a>
<a href="./gdpr_notice.html">GDPR Notice</a>
</footer>
</main> </main>
<script>
(function() {
var tabs = ['bookable', 'talks', 'publications'];
var labels = document.querySelectorAll('nav.tabs label');
function syncAria(active) {
labels.forEach(function(l) {
l.setAttribute('aria-selected', l.getAttribute('for') === 'tab-' + active ? 'true' : 'false');
});
}
var hash = location.hash.substring(1);
if (tabs.indexOf(hash) !== -1) {
var input = document.getElementById('tab-' + hash);
if (input) input.checked = true;
syncAria(hash);
} else {
syncAria('bookable');
}
labels.forEach(function(l) {
l.addEventListener('click', function() {
var name = l.getAttribute('for').replace('tab-', '');
history.replaceState(null, '', '#' + name);
syncAria(name);
});
l.addEventListener('keydown', function(e) {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
l.click();
}
});
});
})();
</script>
</body> </body>
</html> </html>