2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00
2026-10-25 19:35:32 +01:00

lux.harlelux.de

Meine persönliche Website mit Portfolio. Node.js und Express, die Seiten werden mit Nunjucks auf dem Server gerendert. Inhalte liegen als YAML und Markdown in content/, ein CMS gibt es nicht.

Entwicklung

Node 24 (siehe .nvmrc).

npm install
npm run dev     # http://localhost:3000, baut CSS/JS bei Änderungen neu
npm test

Im Dev-Modus sind Einträge mit draft: true sichtbar und bekommen ein Entwurf-Badge.

Inhalte

content/
  site.yml          Name, Pronomen, Links, Skills, "Gerade dran"
  home.yml          Texte und Kacheln der Startseite
  journey.yml       Stationen für den Werdegang
  homelab.yml       Hardware und Dienste
  pages/            Werdegang und Homelab als <name>.de.md / <name>.en.md
  projects/<slug>/  ein Ordner pro Projekt

Texte, die in beiden Sprachen gleich sind, stehen einfach als String. Sonst:

title:
  de: Videoschnitt
  en: Video editing

Neues Projekt

content/projects/mein-projekt/meta.yml:

date: 2026-09          # Jahr, Monat oder Tag
tags: [homelab, docker]
featured: true         # auf der Startseite zeigen
draft: true            # online erst sichtbar, wenn das weg ist
cover: cover.jpg
video: https://youtu.be/...   # oder eine Datei aus dem Ordner, z.B. clip.mp4
gallery:
  - screenshot.png
  - src: rack.jpg
    caption:
      de: Das Rack
      en: The rack
links:
  - label: Repo
    url: https://git.harlelux.de/Harlekin/...

Dazu de.md und en.md mit title und summary im Frontmatter und dem Text darunter. Fehlt eine Sprache, wird die andere angezeigt. Bilder liegen im selben Ordner und werden relativ eingebunden (![Beschreibung](bild.jpg)), die Seite erzeugt automatisch kleinere WebP-Versionen.

Deployment

Läuft als Docker-Stack in Dockge hinter Nginx Proxy Manager.

git clone https://git.harlelux.de/Harlekin/Personal-Website.git /opt/stacks/personal-website
cd /opt/stacks/personal-website
cp .env.example .env    # nur nötig, wenn etwas vom Standard abweicht
docker compose up -d --build

Im Nginx Proxy Manager einen Proxy Host für lux.harlelux.de auf personal-website:3000 anlegen, mit Let's-Encrypt-Zertifikat und Force SSL. Der Container hängt im Netzwerk nginx_default, ein anderer Name lässt sich über PROXY_NETWORK in der .env setzen.

Updates:

  • Nur Inhalte geändert: git pull reicht. content/ ist in den Container gemountet und wird automatisch neu geladen.
  • Code geändert: git pull und docker compose up -d --build.

Neu laden lässt sich der Inhalt auch von Hand mit docker kill -s HUP personal-website.

Lizenz

Der Code steht unter der MIT-Lizenz (siehe LICENSE). Texte und Bilder in content/ sind davon ausgenommen.

S
Description
No description provided
Readme MIT
1 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 47.6%
CSS 30.9%
Nunjucks 21.2%
Dockerfile 0.3%