Repo for the whole DH/AS webstack
Find a file
Dada1981 97a0264c18
Merge pull request #8 from Dada1981/ai-changes
Switched to domain based routing
2026-07-20 23:26:49 +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
public Added pictures to /public 2026-07-20 21:25:43 +02:00
src Switched to domain based routing 2026-07-20 23:25:50 +02:00
.env.example feat: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
.gitignore Added image picker and upload function 2026-07-20 22:11:02 +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: initialize dual identity author portfolio 2026-06-10 22:33:37 +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: initialize dual identity author portfolio 2026-06-10 22:33:37 +02:00
server.ts Added image picker and upload function 2026-07-20 22:11:02 +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, zwei völlig 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, robusten 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 Ihren beiden Identitäten herstellen können:

  • 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 (M. S. Velvet — Sinnliche Literatur): Erreichbar ausschließlich über den Pfad /sensual-moments. Sie verwendet ein warmes, edles "Champagner-Gold & Samt-Bordeaux"-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 wertvollen Inhalte (Biografien, Projektfortschritte und alle Bücherregal-Einträge) liegen verschlüsselt strukturiert 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.