Migrate Vite SPA to Hugo (hugo-coder, dark) with WebGPU background

- Hugo static site at root: config, content (home/about/resume/blog + 5 projects),
  data/resume.yaml, custom layouts (gpu background, resume renderer, projects list),
  dark theme with canvas behind content
- gpu-bg/: extracted WebGPU/WebGL2 spiral engine as a Vite sub-package; slim bootstrap
  drops router/overlay/text renderer; fixed uniforms (scene0/dim0); self-contained engine.js
- archive/: retired Vite SPA preserved (router, overlay, data, engine/text orphaned)
- 3-stage Dockerfile (node -> hugo extended/dart-sass -> nginx), static nginx config
- DEPLOYMENT.md handover + README rewrite; pre-hugo rollback tag
This commit is contained in:
2026-08-21 03:39:42 +02:00
parent 3ad5cf55e3
commit 9ea85db5ce
74 changed files with 3170 additions and 75 deletions

11
layouts/home.html Normal file
View File

@@ -0,0 +1,11 @@
{{ define "content" }}
{{ partial "gpu-background.html" . }}
{{ partial "home.html" . }}
{{ if .Content }}
<section class="container centered">
<div class="about home-content">
{{ .Content }}
</div>
</section>
{{ end }}
{{ end }}

View File

@@ -0,0 +1,2 @@
<canvas id="gpu" aria-hidden="true"></canvas>
<script src="{{ "gpu/engine.js" | relURL }}" defer></script>

View File

@@ -0,0 +1,37 @@
{{ define "title" }}
{{ .Title }} · {{ .Site.Title }}
{{ end }}
{{ define "content" }}
<section class="container list">
<header>
<h1 class="title">
<a class="title-link" href="{{ .Permalink | safeURL }}">
{{ .Title }}
</a>
</h1>
</header>
{{ .Content }}
{{ range .Pages.ByDate.Reverse }}
<div class="project-card">
{{ if .Params.period }}
<p class="project-period">{{ .Params.period }}</p>
{{ end }}
<h2 class="project-name">
<a class="title-link" href="{{ .RelPermalink }}">{{ .Title }}</a>
</h2>
{{ if .Params.description }}
<p class="project-desc">{{ .Params.description }}</p>
{{ end }}
{{ if .Params.tags }}
<p class="project-tags">
{{ range .Params.tags }}
<span class="pill">{{ . }}</span>
{{ end }}
</p>
{{ end }}
</div>
{{ end }}
</section>
{{ end }}

View File

@@ -0,0 +1,68 @@
{{ define "title" }}
{{ .Title }} · {{ .Site.Title }}
{{ end }}
{{ define "content" }}
{{ with hugo.Data.resume }}
<section class="container page">
<article class="resume">
<header>
<h1 class="title">{{ .name }}</h1>
<p class="resume-contact">
{{ range $i, $c := .contact }}
{{ if $i }}<span class="contact-sep"> · </span>{{ end }}
<a href="{{ $c.href | safeURL }}">{{ $c.label }}</a>
{{ end }}
</p>
<p class="resume-meta">{{ .location }}</p>
</header>
<section>
<h2>Summary</h2>
<p>{{ .summary }}</p>
</section>
<section>
<h2>Work Experience</h2>
{{ range .work }}
<div class="resume-card">
<p class="resume-period">{{ .date }}</p>
<h3>{{ .role }}</h3>
<p class="resume-meta">{{ .company }} — {{ .location }}</p>
<ul>
{{ range .bullets }}
<li>{{ . }}</li>
{{ end }}
</ul>
</div>
{{ end }}
</section>
<section>
<h2>Education</h2>
{{ range .education }}
<div class="resume-card">
<p class="resume-period">{{ .date }}</p>
<h3>{{ .role }}</h3>
<p class="resume-meta">{{ .company }} — {{ .location }}</p>
{{ if .thesis }}
<p class="resume-meta resume-thesis"><em>{{ .thesis }}</em></p>
{{ end }}
</div>
{{ end }}
</section>
<section>
<h2>Skills</h2>
{{ range .skills }}
<h3>{{ .label }}</h3>
<p>
{{ range .skills }}
<span class="pill">{{ . }}</span>
{{ end }}
</p>
{{ end }}
</section>
</article>
</section>
{{ end }}
{{ end }}