Personal Website, vers. 1 (pushed far to late)

This commit is contained in:
Harlekin committed 2026-10-25 16:02:12 +01:00
commit c8df66d3da
103 files changed
+8977

No files matched your search

+83
View File
@@ -0,0 +1,83 @@
# 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`).
```sh
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. Ohne SMTP-Konfiguration landen Mails aus dem Kontaktformular in der Konsole.
## 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, Homelab, Datenschutz 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:
```yaml
title:
de: Videoschnitt
en: Video editing
```
### Neues Projekt
`content/projects/mein-projekt/meta.yml`:
```yaml
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.
```sh
git clone https://git.harlelux.de/Harlekin/Personal-Website.git /opt/stacks/personal-website
cd /opt/stacks/personal-website
cp .env.example .env # SMTP usw. eintragen
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.