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):
|
<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;" />
|
||||||
* Rust
|
<hgroup>
|
||||||
* Elixir
|
<h1>Ville Lindholm</h1>
|
||||||
* Any Lisp
|
<p>Full-stack Software engineer</p>
|
||||||
|
<p>Helsinki, Finland</p>
|
||||||
Get in touch via e-mail, the address is `<my first name>@<my last name>.dev`.
|
</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
|
copyright: © Ville Lindholm
|
||||||
disableHugoGeneratorInject: true
|
disableHugoGeneratorInject: true
|
||||||
|
|
||||||
|
params:
|
||||||
|
description: "Ville Lindholm is a freelance software developer."
|
||||||
|
author: "Ville Lindholm"
|
||||||
|
social:
|
||||||
|
github: "vlindhol"
|
||||||
|
twitter: "lindholm_dev"
|
||||||
|
linkedin: "villelindholm"
|
||||||
|
|
||||||
markup:
|
markup:
|
||||||
highlight:
|
highlight:
|
||||||
style: solarized-dark
|
style: solarized-dark
|
||||||
|
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
- name: CV
|
||||||
|
url: /cv/
|
||||||
|
weight: 1
|
||||||
|
- name: Blog
|
||||||
|
url: /blog/
|
||||||
|
weight: 2
|
||||||
|
|||||||
@ -1,74 +1,10 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
{{ partial "head.html" . }}
|
||||||
<head>
|
<body>
|
||||||
<meta charset="utf-8">
|
{{ partial "header.html" . }}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<main class="container">
|
||||||
|
{{ block "main" . }}{{ end }}
|
||||||
<!-- Open Graph metadata -->
|
</main>
|
||||||
<meta property="og:title" content="Lindholm Software">
|
</body>
|
||||||
<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>
|
|
||||||
|
|
||||||
</html>
|
</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