import kgva site

This commit is contained in:
2026-06-29 01:37:03 +02:00
commit f7643602cb
103 changed files with 2015 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
{{ define "bodyclass" }}page-404{{ end }}
{{ define "main" }}
<div class="tui">
<p class="tui__cmd"><span class="tui__sym">$</span> cd <span class="err404">.</span></p>
<p class="tui__total">cd: no such file or directory: <span class="err404">.</span></p>
<p>error 404 — nothing lives here.</p>
<p><a href="{{ "/" | relURL }}">cd ~</a></p>
</div>
<script>
(function () {
var p = (location.pathname || "/").replace(/\/$/, "") || "/";
var n = document.querySelectorAll(".err404");
for (var i = 0; i < n.length; i++) n[i].textContent = p;
})();
</script>
{{ end }}
+27
View File
@@ -0,0 +1,27 @@
{{ define "bodyclass" }}page-about{{ end }}
{{ define "main" }}
{{ $cv := .Site.GetPage "/cv" }}
<div class="tui tui--files filebrowser">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
<p class="tui__cmd tui__total">total {{ if $cv }}2{{ else }}1{{ end }}</p>
<ul class="tui__ls">
<li><a href="{{ "/" | relURL }}" data-name="..">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
</a></li>
<li><a data-name="info.md" data-text="info.md" class="is-selected">
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">info.md</span>
</a></li>
{{ if $cv }}
<li><a data-name="cv.md" data-text="cv.md">
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">cv.md</span>
</a></li>
{{ end }}
</ul>
<figure class="tui__preview">
<div class="tui__text" data-text="info.md">{{ .Content }}</div>
{{ if $cv }}<div class="tui__text" data-text="cv.md" hidden>{{ $cv.Content }}</div>{{ end }}
<figcaption class="tui__status">info.md</figcaption>
</figure>
</div>
{{ end }}
+20
View File
@@ -0,0 +1,20 @@
<!doctype html>
<html lang="{{ .Site.Language.Lang | default "en" }}" dir="ltr">
{{ partial "head.html" . }}
<body class="{{ block "bodyclass" . }}{{ end }}">
<div id="boot" aria-hidden="true"><pre class="boot__log"></pre></div>
<a href="#main-content" class="skip-link">Skip to content</a>
{{ partial "header.html" . }}
<main id="main-content" role="main">
{{ block "main" . }}{{ end }}
</main>
{{ partial "footer.html" . }}
<script src="{{ "js/cursor.js" | relURL }}" defer></script>
<script src="{{ "js/shell.js" | relURL }}" defer></script>
<script src="{{ "js/filebrowser.js" | relURL }}" defer></script>
<script src="{{ "js/nav.js" | relURL }}" defer></script>
<script src="{{ "js/boot.js" | relURL }}" defer></script>
<script>document.addEventListener('contextmenu',function(e){e.preventDefault();});</script>
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
{{ define "bodyclass" }}page-legal{{ end }}
{{ define "main" }}
{{ $files := slice
(.Site.GetPage "/legal/responsible")
(.Site.GetPage "/legal/disclaimer")
(.Site.GetPage "/legal/privacy")
(.Site.GetPage "/legal/licences") }}
{{ $names := slice "responsible.md" "disclaimer.md" "privacy.md" "licences.md" }}
<div class="tui tui--files filebrowser">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
<p class="tui__cmd tui__total">total {{ len $files }}</p>
<ul class="tui__ls">
<li><a href="{{ "/" | relURL }}" data-name="..">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
</a></li>
{{ range $i, $p := $files }}{{ if $p }}
<li><a data-name="{{ index $names $i }}" data-text="{{ index $names $i }}"{{ if eq $i 0 }} class="is-selected"{{ end }}>
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">{{ index $names $i }}</span>
</a></li>
{{ end }}{{ end }}
</ul>
<figure class="tui__preview">
{{ range $i, $p := $files }}{{ if $p }}
<div class="tui__text" data-text="{{ index $names $i }}"{{ if ne $i 0 }} hidden{{ end }}>{{ $p.Content }}</div>
{{ end }}{{ end }}
<figcaption class="tui__status">responsible.md</figcaption>
</figure>
</div>
{{ end }}
+7
View File
@@ -0,0 +1,7 @@
{{ define "main" }}
{{ if .Params.toc }}
<nav class="toc"><strong>TABLE OF CONTENTS</strong><div class="toc-content">{{ .TableOfContents }}</div></nav>
{{ end }}
{{ .Content }}
<div class="terminal-nav"><div class="back-nav"><a href="{{ "/" | relURL }}" class="back-link">../</a></div></div>
{{ end }}
+18
View File
@@ -0,0 +1,18 @@
{{ define "bodyclass" }}page-portfolio{{ end }}
{{ define "main" }}
{{ $up := "/" }}{{ if eq .Kind "term" }}{{ $up = "/portfolio/" }}{{ end }}
<div class="tui tui--files filebrowser">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
<p class="tui__cmd tui__total">total {{ len .Pages }}</p>
<ul class="tui__ls">
<li><a href="{{ $up | relURL }}" data-name="..">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
</a></li>
{{ range .Pages }}
<li><a href="{{ .RelPermalink }}" data-name="{{ .LinkTitle }}">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">{{ .LinkTitle }}/</span>
</a></li>
{{ end }}
</ul>
</div>
{{ end }}
+8
View File
@@ -0,0 +1,8 @@
{{ define "bodyclass" }}home{{ end }}
{{ define "main" }}
{{ with .Params.heroImage }}
<figure class="hero__img">
<img src="{{ . | relURL }}" alt="" width="1200" height="1504" fetchpriority="high">
</figure>
{{ end }}
{{ end }}
+5
View File
@@ -0,0 +1,5 @@
<footer role="contentinfo">
<p>© {{ now.Year }} karimgabrielevarano.xyz</p>
<p><a href="{{ "/colophon/" | relURL }}" data-name="colophon">colophon</a> · <a href="{{ "/legal-notice/" | relURL }}" data-name="legal-notice">legal notice</a></p>
<a href="{{ "/cv/" | relURL }}" data-name="cv" hidden>cv</a>
</footer>
+60
View File
@@ -0,0 +1,60 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<meta name="theme-color" content="#111111">
<script>try{if(localStorage.getItem('kgv_theme')==='dark')document.documentElement.classList.add('dark');}catch(e){}</script>
<script>try{if(!sessionStorage.getItem('kgv_booted')){document.documentElement.classList.add('booting');setTimeout(function(){document.documentElement.classList.remove('booting');},3000);}}catch(e){}</script>
{{ $isHome := .IsHome }}
{{ $desc := .Site.Params.description }}{{ with .Description }}{{ $desc = . }}{{ end }}
<title>{{ if $isHome }}{{ .Site.Title }} — {{ .Site.Params.description }}{{ else }}{{ .Title }} — {{ .Site.Title }}{{ end }}</title>
<meta name="description" content="{{ $desc }}">
<meta name="author" content="{{ .Site.Params.author }}">
<link rel="canonical" href="{{ .Permalink }}">
{{/* social card image: project thumbnail, else home hero, else site default */}}
{{ $ogimg := .Site.Params.ogImage }}
{{ with .Params.heroImage }}{{ $ogimg = . }}{{ end }}
{{ with .Params.thumbnail }}{{ $ogimg = . }}{{ end }}
{{ $ogabs := "" }}{{ with $ogimg }}{{ $ogabs = . | absURL }}{{ end }}
<meta property="og:site_name" content="{{ .Site.Title }}">
<meta property="og:title" content="{{ if $isHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
<meta property="og:description" content="{{ $desc }}">
<meta property="og:type" content="{{ if eq .Section "portfolio" }}article{{ else }}website{{ end }}">
<meta property="og:url" content="{{ .Permalink }}">
<meta property="og:locale" content="{{ .Site.Language.Lang | default "en" }}">
{{ with $ogabs }}<meta property="og:image" content="{{ . }}">{{ end }}
<meta name="twitter:card" content="{{ if $ogabs }}summary_large_image{{ else }}summary{{ end }}">
<meta name="twitter:title" content="{{ if $isHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
<meta name="twitter:description" content="{{ $desc }}">
{{ with $ogabs }}<meta name="twitter:image" content="{{ . }}">{{ end }}
<link rel="preload" as="font" type="font/woff2" href="{{ "fonts/iosevka-curly-slab-400.woff2" | relURL }}" crossorigin>
{{ $site := resources.Get "css/site.css" }}
{{ $custom := resources.Get "css/custom.css" }}
{{ $css := slice $site $custom | resources.Concat "css/bundle.css" | minify | fingerprint }}
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
<link rel="icon" href="{{ "favicon.svg" | relURL }}" type="image/svg+xml">
<link rel="icon" href="{{ "favicon-32.png" | relURL }}" sizes="32x32" type="image/png">
<link rel="apple-touch-icon" href="{{ "apple-touch-icon.png" | relURL }}">
<link rel="mask-icon" href="{{ "favicon.svg" | relURL }}" color="#111111">
{{ if $isHome }}
<script type="application/ld+json">
{{ ( dict
"@context" "https://schema.org"
"@type" "Person"
"name" .Site.Params.author
"url" .Site.BaseURL
"email" .Site.Params.email
"jobTitle" "Architect"
"address" ( dict "@type" "PostalAddress" "addressLocality" "Lucerne" "addressCountry" "CH" )
) | jsonify | safeJS }}
</script>
{{ end }}
</head>
+21
View File
@@ -0,0 +1,21 @@
<header role="banner">
<div class="topbar" data-home="{{ "/" | relURL }}" data-info="{{ .Site.Params.description }}" data-email="{{ .Site.Params.email }}">
<div class="prompt" aria-label="shell">
<a class="prompt__seg prompt__user" href="{{ "/" | relURL }}">{{ .Site.Params.shellUser }}@{{ .Site.Params.shellHost }}</a><span class="prompt__path">:~{{ if not .IsHome }}{{ $rel := strings.TrimSuffix "/" .RelPermalink }}{{ $parts := after 1 (split $rel "/") }}{{ $last := sub (len $parts) 1 }}{{ $acc := "" }}{{ range $i, $seg := $parts }}{{ $acc = printf "%s/%s" $acc $seg }}{{ $disp := $seg }}{{ if and $.Params.dotfile (eq $i $last) }}{{ $disp = printf ".%s" $seg }}{{ end }}/<a class="prompt__seg" href="{{ (printf "%s/" $acc) | relURL }}">{{ $disp }}</a>{{ end }}{{ end }}$</span><span class="prompt__input" contenteditable="true" role="textbox" aria-label="type a command, then press enter" spellcheck="false"></span><span class="caret">_</span>
</div>
<p class="prompt__out" aria-live="polite"></p>
<nav class="menu tui tui--files" aria-label="Main menu">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
<ul class="tui__ls">
{{ range .Site.Menus.main }}<li><a href="{{ .URL | relURL }}" data-name="{{ .Name | lower }}">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">{{ .Name | lower }}/</span>
</a></li>{{ end }}
</ul>
</nav>
{{ if eq .Section "portfolio" }}
<nav class="routes" hidden aria-hidden="true">
{{ range (where .Site.RegularPages "Section" "portfolio") }}<a href="{{ .RelPermalink }}" data-name="{{ .Slug }}"></a>{{ end }}
</nav>
{{ end }}
</div>
</header>
+27
View File
@@ -0,0 +1,27 @@
{{ define "bodyclass" }}page-portfolio{{ end }}
{{ define "main" }}
{{ $sorted := sort .Pages "Date" "desc" }}
{{ $first := index $sorted 0 }}
<div class="tui filebrowser">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
<p class="tui__cmd tui__total">total {{ len $sorted }}</p>
<ul class="tui__ls">
<li><a href="{{ "/" | relURL }}" data-name="..">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__date"></span><span class="tui__name">..</span>
</a></li>
{{ range $i, $p := $sorted }}
<li><a href="{{ $p.RelPermalink }}"
data-img="{{ with $p.Params.thumbnail }}{{ . | relURL }}{{ end }}"
data-name="{{ $p.Slug }}"
{{ if eq $i 0 }}class="is-selected"{{ end }}>
<span class="tui__perm">drwxr-xr-x</span><span class="tui__date">{{ $p.Date.Format "2006" }}</span><span class="tui__name">{{ $p.Slug }}/</span>
</a></li>
{{ end }}
</ul>
<figure class="tui__preview">
<img src="{{ $first.Params.thumbnail | relURL }}" alt="{{ $first.Slug }}">
<figcaption class="tui__status">{{ $first.Slug }}/&nbsp;&nbsp;{{ $first.Date.Format "2006" }}</figcaption>
</figure>
</div>
{{ end }}
+63
View File
@@ -0,0 +1,63 @@
{{ define "bodyclass" }}page-portfolio{{ end }}
{{ define "main" }}
{{ $hasText := ne (.RawContent | strings.TrimSpace) "" }}
{{ $images := .Params.images }}
{{ with .Params.vimeo }}
<div style="padding:56.25% 0 0;position:relative">
<iframe src="https://player.vimeo.com/video/{{ . }}?badge=0&autopause=0&player_id=0&app_id=58479"
loading="lazy" frameborder="0"
allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"
referrerpolicy="strict-origin-when-cross-origin"
style="position:absolute;top:0;left:0;width:100%;height:100%"
title="{{ $.Title }}"></iframe>
</div>
{{ end }}
{{ if or $images $hasText }}
<div class="tui tui--files filebrowser">
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
{{ $total := len $images }}{{ if $hasText }}{{ $total = add $total 1 }}{{ end }}
<p class="tui__cmd tui__total">total {{ $total }}</p>
<ul class="tui__ls">
<li><a href="{{ "/portfolio/" | relURL }}" data-name="..">
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
</a></li>
{{ if $hasText }}
<li><a data-name="info.md" data-text="info.md" class="is-selected">
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">info.md</span>
</a></li>
{{ end }}
{{ range $i, $im := $images }}
<li><a data-img="{{ $im.src | relURL }}" data-name="{{ $im.name }}"{{ if and (not $hasText) (eq $i 0) }} class="is-selected"{{ end }}>
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">{{ $im.name }}</span>
</a></li>
{{ end }}
</ul>
<figure class="tui__preview">
{{ if $hasText }}<div class="tui__text" data-text="info.md">{{ .Content }}</div>{{ end }}
<img{{ if $hasText }} hidden{{ end }} src="{{ with $images }}{{ (index . 0).src | relURL }}{{ end }}" alt="{{ .Title }}">
<figcaption class="tui__status">{{ if $hasText }}info.md{{ else if $images }}{{ (index $images 0).name }}{{ end }}</figcaption>
</figure>
</div>
{{ end }}
{{ with .Params.studies }}
{{ $segs := after 2 (split . "/") }}
{{ $taxos := slice "schools" "degrees" "semesters" }}
{{ $last := sub (len $segs) 1 }}
<p class="proj-path">/studies/{{ range $i, $seg := $segs }}{{ if $i }}/{{ end }}{{ $terms := $.GetTerms (index $taxos $i) }}{{ if $terms }}{{ $t := index $terms 0 }}<a class="proj-path__seg{{ if eq $i $last }} proj-path__seg--last{{ end }}" href="{{ $t.RelPermalink }}">{{ $seg }}</a>{{ else }}{{ $seg }}{{ end }}{{ end }}</p>
{{ end }}
<div class="time"><time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006" }}&nbsp;</time></div>
{{ $list := sort (where .Site.RegularPages "Section" "portfolio") "Date" "desc" }}
{{ $idx := -1 }}
{{ range $i, $p := $list }}{{ if eq $p.RelPermalink $.RelPermalink }}{{ $idx = $i }}{{ end }}{{ end }}
<nav class="proj-nav" aria-label="Project navigation">
{{ $older := add $idx 1 }}{{ $newer := sub $idx 1 }}
{{ if lt $older (len $list) }}<a href="{{ (index $list $older).RelPermalink }}" rel="prev" aria-label="older project"></a>{{ end }}
{{ if ge $newer 0 }}<a href="{{ (index $list $newer).RelPermalink }}" rel="next" aria-label="newer project"></a>{{ end }}
</nav>
{{ end }}
+5
View File
@@ -0,0 +1,5 @@
User-agent: *
Allow: /
Disallow: /admin/
Sitemap: {{ "sitemap.xml" | absURL }}