Größeres Redesign, das die Seite spürbar besser macht. Behält das
Magenta/Grün-Dark-Thing, poliert aber alles drumherum.
Neue Komponenten:
- hero-banner: full-bleed Hero mit AI-generiertem Hintergrund (grok-imagine-image,
1280×720, Magenta/Grün-Akzente), Terminal-Boot-Animation mit Tipp-Effekt,
Rotating-Role-Animation, animiertes Grid-Overlay.
- command-palette: �K / Ctrl+K öffnet ein durchsuchbares Modal mit Navigation,
Projekt-Suche, Aktionen (Gitea/w-make.com/Admin) und Easter Eggs. Tastatur
↑↓/Enter/Esc, gruppiert nach Typ, mit Vorschau-Hints.
- custom-cursor: Canvas-basierter Cursor mit Trail für Desktop, 14 Punkte,
Farbwechsel Magenta↔Grün, Hover-State für interaktive Elemente. Touch-
Devices behalten den Default-Cursor.
- scroll-progress: Top-Bar mit Magenta→Grün-Gradient.
- tilt-card: 3D-Hover mit Mouse-Tracking (CSS-Variablen --rx/--ry/--mx/--my).
- stack-icon: 13 handgezeichnete inline SVGs (TypeScript, Node, Python, Rust,
SQLite, Tailwind, React, Docker, Gitea, Next, Nix, Hermes, Shell, Self-Host).
Kein CDN, kein Hydration, currentColor-aware.
- project-filter: tag-basierter Filter für Projekt-Liste, Status-Tone-Tags
(live/warm/muted) plus Kategorie-Tags, useTransition für sanfte Updates.
Pages-Update:
- Home (/): neuer Hero-Banner, Featured-Grid mit Tilt-Cards und KI-generierten
Thumbnails (hermes.jpg, casino-bot.jpg, polymarket-trader.jpg), darunter
filterbare Projekt-Liste, Bio + Links Sidebar.
- Projects: filterbar nach Kategorie und Status.
- Project-Detail: Hero-Image (für 3 Projekte), Stack-Pills mit SVG-Icons,
bessere Sektionierung (~/stack, ~/notes).
- About: Stack-Visualisierung mit 13 Einträgen in einem Grid.
- OpenGraph-Image pro Projekt (Next.js native, 1200×630): eldov-Logo,
Projekt-Slug in Magenta, Status-Badge, Kategorie-Badge.
Build-Hash-Support:
- NEXT_PUBLIC_BUILD_HASH + NEXT_PUBLIC_BUILD_DATE werden via Docker ARG in
die Footer geschrieben ("build abc1234 · 2026-08-31"), deploy-vps.sh
ermittelt Commit-Hash automatisch aus git und gibt ihn weiter.
Theme v2:
- Tiefere Palette (--bg #0a0a10, --bg-deep #050508), --fg-dim für Hierarchie.
- Neue Komponenten-Klassen: tilt-card, stack-pill, tag, hero-bg, hero-banner,
scroll-progress, cursor-blink, type-in, glow-text.
- ASCII-Box-Hover-Effekt mit Akzent-Border.
Public-Bilder unter public/img/{hero,projects}/ — KI-generiert via xAI
grok-imagine-image (Token aus .hermes-state/credentials/xai.json), alle
im Marken-Stil (Magenta/Grün/dunkel). 4 Bilder, ~960 KB total.
Sonstiges:
- Header mit ⌘K-Hint, sticky+blur.
- Footer mit Build-Hash, externen Links, Datenschutz-Badge.
- About-Page mit Stack-Grid.
73 lines
2.5 KiB
Bash
Executable File
73 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# deploy-vps.sh — Synchronisiert den eldov-win Workspace auf den VPS-Container.
|
||
# Host: free-warez.win · Container-Pfad: /opt/containers/eldov-portfolio
|
||
#
|
||
# eldov.win läuft auf demselben VPS wie w-make.com und minecraft-portal.
|
||
# Traefik routet dort die Subdomains per Docker-Labels.
|
||
#
|
||
# Voraussetzungen:
|
||
# - ssh-Zugang zu free-warez.win ist konfiguriert
|
||
# - .env.local ist lokal vorhanden (wird NICHT übertragen)
|
||
# - auf dem VPS liegt bereits ein Container namens 'eldov-portfolio'
|
||
|
||
set -euo pipefail
|
||
|
||
VPS_HOST="${VPS_HOST:-free-warez.win}"
|
||
VPS_DIR="${VPS_DIR:-/opt/containers/eldov-portfolio}"
|
||
|
||
# 1. Check SSH connection
|
||
echo "→ Prüfe SSH-Verbindung zu $VPS_HOST..."
|
||
if ! ssh -q -o BatchMode=yes -o ConnectTimeout=10 "$VPS_HOST" exit; then
|
||
echo "❌ Keine SSH-Verbindung zu $VPS_HOST möglich."
|
||
exit 1
|
||
fi
|
||
|
||
# 2. Push git commits if in git repo
|
||
LOCAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
if [ -d "$LOCAL_DIR/.git" ]; then
|
||
echo "→ Prüfe Git-Status..."
|
||
if ! git -C "$LOCAL_DIR" diff-index --quiet HEAD -- 2>/dev/null; then
|
||
echo "⚠️ Lokale uncommitted Änderungen vorhanden."
|
||
fi
|
||
echo "→ Pushe Commits nach Gitea..."
|
||
git -C "$LOCAL_DIR" push origin main 2>/dev/null || echo "ℹ️ Git push übersprungen oder bereits aktuell."
|
||
fi
|
||
|
||
echo "→ Synchronisiere Quelldateien nach $VPS_HOST:$VPS_DIR"
|
||
rsync -avz --delete \
|
||
--exclude ".git" \
|
||
--exclude "node_modules" \
|
||
--exclude ".next" \
|
||
--exclude "data" \
|
||
--exclude ".env.local" \
|
||
--exclude "*.log" \
|
||
./ "$VPS_HOST:$VPS_DIR/"
|
||
|
||
echo "→ Build-Hash ermitteln"
|
||
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||
BUILD_DATE=$(date -u +%Y-%m-%d)
|
||
echo " Commit: $COMMIT_HASH · Date: $BUILD_DATE"
|
||
|
||
echo "→ Baue und starte Container auf $VPS_HOST neu"
|
||
ssh "$VPS_HOST" "cd '$VPS_DIR' && \
|
||
[ -f .env.local ] || { echo 'FEHLT: .env.local auf dem VPS — bitte anlegen'; exit 1; } && \
|
||
NEXT_PUBLIC_BUILD_HASH=$COMMIT_HASH NEXT_PUBLIC_BUILD_DATE=$BUILD_DATE \
|
||
docker compose build app && \
|
||
docker compose up -d app && \
|
||
docker image prune -f"
|
||
|
||
echo "✓ Deploy abgeschlossen. Healthcheck in 5 s…"
|
||
sleep 5
|
||
echo -n " Docker Health: "
|
||
ssh "$VPS_HOST" "docker inspect --format='{{if .State.Health}}{{.State.Health.Status}}{{else}}no healthcheck{{end}}' eldov-portfolio"
|
||
|
||
echo -n " Public URL (https://eldov.win): "
|
||
if curl -fs -o /dev/null --resolve eldov.win:443:217.160.217.196 -m 5 "https://eldov.win/"; then
|
||
echo "✅ 200 OK"
|
||
else
|
||
echo "⚠️ Nicht erreichbar"
|
||
fi
|
||
|
||
echo "✨ Deployment erfolgreich beendet!"
|
||
|