Repo for the whole DH/AS webstack
Find a file
Dada1981 9a37a6e937
Merge pull request #12 from Dada1981/codex/persistence-seo-hardening
feat: improve responsive project detail layout
2026-08-14 23:06:35 +02:00
assets/.aistudio feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
data Changed folder structure 2026-07-20 21:46:53 +02:00
src feat: improve responsive project detail layout 2026-08-14 23:05:11 +02:00
.dockerignore Switched to modular data-layout. Added fourth portfolio. 2026-07-22 16:46:50 +02:00
.env.example feat: harden persistence and enrich portfolio projects 2026-08-14 22:43:40 +02:00
.gitignore Switched to modular data-layout. Added fourth portfolio. 2026-07-22 16:46:50 +02:00
bun.lock Selektiv die AI-Änderungen übernommen 2026-07-20 13:53:24 +02:00
docker-compose.yml feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
Dockerfile build: update npm install commands and prune data 2026-06-11 10:02:13 +02:00
index.html feat: harden persistence and enrich portfolio projects 2026-08-14 22:43:40 +02:00
metadata.json feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
package.json Selektiv die AI-Änderungen übernommen 2026-07-20 13:53:24 +02:00
README.md feat: harden persistence and enrich portfolio projects 2026-08-14 22:43:40 +02:00
server.ts feat: harden persistence and enrich portfolio projects 2026-08-14 22:43:40 +02:00
tsconfig.json feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
vite.config.ts feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00

📚 Dual Identity Autoren-Zentrale (Selbstgehostet)

Willkommen in Ihrer modernen, reaktiven Autoren-Website für das 21. Jahrhundert! Dieses System ermöglicht es Ihnen, mehrere eigenständige Autorenprofile mit individuellen Themen, Biografien, Schreibprojekten und Bücherregalen über eine einzige, passwortgeschützte Administrationsoberfläche zu pflegen.


🛠️ Warum kein klassischer LAMP-Stack? (Unser Vorschlag)

Bisher liefen klassische Portfolios oft auf einem standardmäßigen LAMP-Stack (Linux, Apache, MySQL, PHP). Für diese modernisierte Website schlagen wir einen Node.JS + Docker-Stack vor. Hier ist der Grund, warum das für Ihre Bedürfnisse die deutlich bessere Option ist:

  1. Vollständige Kapselung (Kein Server-Wildwuchs): Bei einem LAMP-Stack müssen Sie Apache/Nginx, PHP-Laufzeiten und eine MySQL-Datenbank auf dem Host installieren und managen. Unser Docker-Stack bündelt das gesamte Frontend, das Express-Backend und die Speicherrelevanz in einem einzigen, autarken Container.
  2. Blitzschnelle, reaktive Benutzeroberfläche (SPA): Das Frontend nutzt modernste Webtechnologie (React & Tailwind CSS). Seitenwechsel und Buchdetails laden augenblicklich im Browser des Nutzers, ohne das klassische, träge Neuladen von PHP-Seiten.
  3. Einfachheit bei Datensicherungen (Backups): Anstatt komplexe MySQL-Dumps durchzuführen, speichert unsere Anwendung alle Buchtitel, Projekte, Cover und Biografien in einer schlanken JSON-Datenbankdatei (/data/database.json). Ein Backup lässt sich durch einfaches Kopieren dieser Datei anfertigen!
  4. KI-Unterstützung integriert: Der integrierte Gemini-Klappentext-Assistent läuft nahtlos und sicher über das Node-Backend (ohne API-Schlüssel im Webbrowser zu exponieren).

🌌 Die Trennung der Profile

Das System ist von Grund auf so strukturiert, dass Besucher der Website keine Verbindung zwischen den gepflegten Identitäten herstellen müssen. Der Code enthält derzeit vier getrennt auflösbare Profile; Domains und Pfade können im Adminbereich gepflegt werden. Unter anderem:

  • Echte Identität (Daniel Hesse — Sci-Fi & Fantasy): Erreichbar auf der Standard-Startseite (/). Das Design kombiniert dunkelblaue Weltraum-Energie, Monospace-Einflüsse und kosmische Magie-Akzente.
  • Pseudonym (Annie Slone — Sinnliche Literatur): Erreichbar unter anderem über den Pfad /sensual-moments. Das Profil verwendet ein warmes, edles Thema mit klassischer und anspruchsvoller Serif-Asthetik. Es gibt keinerlei gegenseitige Verlinkungen!

🚀 Inbetriebnahme als Docker-Stack (Empfohlen)

Es wird dringend empfohlen, die Website mithilfe von Docker und Docker-Compose zu betreiben. Dies garantiert, dass die Anwendung sofort und unabhängig von installierten Node.JS-Versionen auf Ihrem Server funktioniert.

1. Dateien vorbereiten

Stellen Sie sicher, dass sich folgende Dateien im gleichen Ordner auf Ihrem Server befinden:

  • Dockerfile
  • docker-compose.yml
  • Der gesamte Code-Ordner

2. Konfiguration anpassen

Öffnen Sie die docker-compose.yml auf Ihrem Server und passen Sie folgende Umgebungsvariablen an:

environment:
  - NODE_ENV=production
  # Das Passwort für Ihren Administrationsbereich (/admin):
  - ADMIN_PASSWORD=IhrSicheresLieblingsPasswort123
  # (Optional) Für den 21. Jahrhundert Schreibassistenten (Gemini 3.5 Flash)
  - GEMINI_API_KEY=Ihr_Gemini_API_Schluessel

3. Container starten

Führen Sie im entsprechenden Verzeichnis folgenden Befehl aus:

docker compose up -d --build

Die Anwendung baut das Image und startet die Autoren-Zentrale im Hintergrund. Sie ist nun direkt auf Port 3000 Ihres Webservers erreichbar!

Reverse Proxy Tipp:

Sie können ganz hervorragend einen Reverse Proxy wie Nginx Proxy Manager, Traefik oder Caddy davorhängen, um SSL-Zertifikate (Let's Encrypt) zuzuweisen und Ihre Domain auf den Container-Port 3000 umzuleiten.


💾 Manuelle Installation ohne Docker (Alternativ)

Sollten Sie die Software direkt auf Ihrem Server (ohne Docker) starten wollen:

  1. Voraussetzung: Installieren Sie Node.js (v18 oder neuer) auf Ihrem Linux- oder Windows-Server.
  2. Abhängigkeiten installieren:
    npm install
    
  3. Produktions-Build ausführen:
    npm run build
    
  4. Umgebungsvariablen setzen: Erstellen Sie eine .env-Datei oder exportieren Sie diese im Terminal:
    export ADMIN_PASSWORD="IhrSicheresPasswort"
    export GEMINI_API_KEY="Ihr_Gemini_API_Schlüssel"
    
  5. Starten:
    npm start
    

🧱 Datensicherung / Backups

Alle Ihre Inhalte (Biografien, Projektfortschritte und Bücherregal-Einträge) liegen als lesbares JSON in Ihrem Projektordner unter: ./data/database.json

Da wir in der docker-compose.yml ein lokales Volume gemountet haben (./data:/app/data), wird diese Datei direkt auf die Festplatte Ihres Servers geschrieben.

  • Backup erstellen: Sichern Sie einfach die Datei ./data/database.json.
  • Wiederherstellen: Platzieren Sie eine gesicherte database.json in den ./data/-Ordner vor dem Starten des Containers.

Beim Ergänzen neuer Datenfelder legt die Anwendung vor der Migration automatisch eine unveränderte Sicherung unter ./data/backups/ an. Schreibvorgänge erfolgen atomar und werden nacheinander verarbeitet, damit die Datei bei parallelen Änderungen nicht teilweise überschrieben wird. Das Docker-Volume ersetzt dennoch kein externes Backup des Hostsystems.


Betrieb & SEO

  • /health/live zeigt an, ob der Prozess läuft.
  • /health/ready zeigt an, ob die Daten erfolgreich geladen wurden und die Anwendung bereit ist.
  • Seitentitel, Beschreibung, Canonical URL, Open-Graph-Daten und strukturierte Personendaten werden passend zur aufgerufenen Autorendomain serverseitig ausgegeben.
  • /robots.txt und /sitemap.xml werden ebenfalls profilabhängig erzeugt; der Adminbereich ist mit noindex gekennzeichnet.
  • Optionale SEO-Felder können später je Profil gepflegt werden. Ohne sie werden die Angaben rückwärtskompatibel aus den vorhandenen Profildaten abgeleitet.