AI-assisted refactor

This commit is contained in:
Ville Lindholm 2024-12-26 11:44:57 +02:00
parent b4948d99a8
commit e8873e7b8c
No known key found for this signature in database
6 changed files with 97 additions and 79 deletions

View File

@ -1,9 +1,17 @@
Hi! My name is **Ville Lindholm** and I'm a freelance software engineer.
---
title: "Home"
---
I've spent a lot of my professional life building web apps, mostly using full-stack **TypeScript** with **React** as the front-end library. However, I'm a passionate programming-language.-and-paradigm junkie, and will jump at the chance to work with (for example):
* Rust
* Elixir
* Any Lisp
Get in touch via e-mail, the address is `<my first name>@<my last name>.dev`.
<div style="text-align: center; display: flex; justify-content: center; flex-direction: column; align-items: center; height: 50vh;">
<img src="/images/portrait.jpeg" alt="Picture of Ville Lindholm" style="border-radius: 50%; width: 150px; height: 150px;" />
<hgroup>
<h1>Ville Lindholm</h1>
<p>Full-stack Software engineer</p>
<p>Helsinki, Finland</p>
</hgroup>
<div style="display: flex;">
<a href="https://github.com/vlindhol"><i class='bx bxl-github'></i></a>
<a href="https://x.com/lindholm_dev"><i class='bx bxl-twitter'></i></a>
<a href="https://www.linkedin.com/in/villelindholm/"><i class='bx bxl-linkedin-square'></i></a>
</div>
</div>

View File

@ -4,6 +4,23 @@ title: Lindholm Software
copyright: © Ville Lindholm
disableHugoGeneratorInject: true
params:
description: "Ville Lindholm is a freelance software developer."
author: "Ville Lindholm"
social:
github: "vlindhol"
twitter: "lindholm_dev"
linkedin: "villelindholm"
markup:
highlight:
style: solarized-dark
menu:
main:
- name: CV
url: /cv/
weight: 1
- name: Blog
url: /blog/
weight: 2

View File

@ -1,74 +1,10 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Open Graph metadata -->
<meta property="og:title" content="Lindholm Software">
<meta property="og:description" content="Ville Lindholm is a freelance software developer.">
<meta property="og:image" content="https://lindholm.dev/images/portrait.jpeg">
<meta property="og:url" content="https://lindholm.dev">
<meta property="og:type" content="website">
<!-- fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Caprasimo&display=swap" rel="stylesheet">
<link href="https://fonts.cdnfonts.com/css/junicode-2" rel="stylesheet">
<!-- icons -->
<link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>
<!-- pico helps with some basic CSS styling -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.css">
<!-- the rest is ours -->
<link rel="stylesheet" href="/style.css">
<title>{{ .Site.Title }}</title>
<!-- a naive email obfuscator to counteract scrapers -->
<script>
window.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('span#lindholm-email').forEach(function (span) {
span.innerHTML = "Rendering email...";
span.setAttribute('aria-busy', 'true');
});
setTimeout(function () {
let first = 'ville';
let at = '@';
let last = 'lindholm';
document.querySelectorAll('span#lindholm-email').forEach(function (span) {
span.innerHTML = `${first}${at}${last}.dev`;
span.removeAttribute('aria-busy');
});
}, 2000);
});
</script>
</head>
<body>
<header class="container noPrint">
<nav>
<ul>
<li>
<h4><a href="/" class="contrast">{{ .Site.Title }}</a></h4>
</li>
</ul>
<ul>
<li><a href="/cv">
<h5>CV</h5>
</a></li>
<li><a href="/blog">
<h5>Blog</h5>
</a></li>
</ul>
</nav>
</header>
<main class="container">
{{ block "main" . }}{{ end }}
</main>
</body>
{{ partial "head.html" . }}
<body>
{{ partial "header.html" . }}
<main class="container">
{{ block "main" . }}{{ end }}
</main>
</body>
</html>

View File

@ -0,0 +1,17 @@
<script>
window.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('span#lindholm-email').forEach(function (span) {
span.innerHTML = "Rendering email...";
span.setAttribute('aria-busy', 'true');
});
setTimeout(function () {
let first = 'ville';
let at = '@';
let last = 'lindholm';
document.querySelectorAll('span#lindholm-email').forEach(function (span) {
span.innerHTML = `${first}${at}${last}.dev`;
span.removeAttribute('aria-busy');
});
}, 2000);
});
</script>

View File

@ -0,0 +1,29 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Open Graph metadata -->
<meta property="og:title" content="{{ .Site.Title }}">
<meta property="og:description" content="Ville Lindholm is a freelance software developer.">
<meta property="og:image" content="https://lindholm.dev/images/portrait.jpeg">
<meta property="og:url" content="https://lindholm.dev">
<meta property="og:type" content="website">
<!-- fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Caprasimo&display=swap" rel="stylesheet">
<link href="https://fonts.cdnfonts.com/css/junicode-2" rel="stylesheet">
<!-- icons -->
<link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>
<!-- pico helps with some basic CSS styling -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.css">
<!-- the rest is ours -->
<link rel="stylesheet" href="/style.css">
<title>{{ .Site.Title }}</title>
{{ partial "email-obfuscator.html" . }}
</head>

View File

@ -0,0 +1,11 @@
<header class="container noPrint">
<nav>
<ul>
<li><h4><a href="/" class="contrast">{{ .Site.Title }}</a></h4></li>
</ul>
<ul>
<li><a href="/cv"><h5>CV</h5></a></li>
<li><a href="/blog"><h5>Blog</h5></a></li>
</ul>
</nav>
</header>