AI-assisted refactor
This commit is contained in:
parent
b4948d99a8
commit
e8873e7b8c
@ -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>
|
||||
17
hugo.yaml
17
hugo.yaml
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
{{ partial "head.html" . }}
|
||||
<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>
|
||||
{{ partial "header.html" . }}
|
||||
<main class="container">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
17
layouts/partials/email-obfuscator.html
Normal file
17
layouts/partials/email-obfuscator.html
Normal 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>
|
||||
29
layouts/partials/head.html
Normal file
29
layouts/partials/head.html
Normal 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>
|
||||
11
layouts/partials/header.html
Normal file
11
layouts/partials/header.html
Normal 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>
|
||||
Loading…
x
Reference in New Issue
Block a user