diff --git a/server.ts b/server.ts index f15571c..ec19b60 100644 --- a/server.ts +++ b/server.ts @@ -45,6 +45,9 @@ async function initDatabase(): Promise { const keysToEnsure: (keyof AuthorProfile)[] = [ "customSectionTitle", "customSectionContent", "customDomain", "customPath", + "bioTag1Label", "bioTag1Value", + "bioTag2Label", "bioTag2Value", + "bioTag3Label", "bioTag3Value", "badgeText", "aboutTitle", "projectsTitle", "projectsSubtitle", "booksTitle", "booksSubtitle", "footerText", "accentColor", "secondaryColor", "backgroundColor", "cardBgColor", diff --git a/src/components/AdminPanel.tsx b/src/components/AdminPanel.tsx index e01e52f..3c231b3 100644 --- a/src/components/AdminPanel.tsx +++ b/src/components/AdminPanel.tsx @@ -3,7 +3,7 @@ import { AuthorData, AuthorProfile, Book, Project } from "../types"; import { Lock, Save, Plus, Trash2, Edit2, Check, RefreshCw, Sparkles, BookOpen, Compass, Clipboard, Eye, Music, LogOut, ArrowLeftRight, - Palette, Type, Image as ImageIcon, Globe + Palette, Type, Image as ImageIcon, Globe, Tag } from "lucide-react"; import ImagePicker from "./ImagePicker"; @@ -594,6 +594,100 @@ export default function AdminPanel({ onLogout }: AdminPanelProps) { /> + {/* Dynamic Schlagworte / Highlights */} +
+
+

+ + Schlagworte & Fokus (3 Infoboxen unter "Über mich") +

+

Diese drei Kacheln erscheinen unter der Biografie. Sie können die Kategoriename (z.B. GENRE, TONALITÄT, FOKUS) und den zugehörigen Inhalt frei anpassen.

+
+ +
+ {/* Schlagwort 1 */} +
+
+ Schlagwort 1 +
+
+ + updateProfileField("bioTag1Label", e.target.value)} + placeholder="z.B. GENRE" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs" + /> +
+
+ + updateProfileField("bioTag1Value", e.target.value)} + placeholder="z.B. Emotionale Romance" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs font-medium" + /> +
+
+ + {/* Schlagwort 2 */} +
+
+ Schlagwort 2 +
+
+ + updateProfileField("bioTag2Label", e.target.value)} + placeholder="z.B. TONALITÄT" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs" + /> +
+
+ + updateProfileField("bioTag2Value", e.target.value)} + placeholder="z.B. Herzlich & Hoffnungsvoll" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs font-medium" + /> +
+
+ + {/* Schlagwort 3 */} +
+
+ Schlagwort 3 +
+
+ + updateProfileField("bioTag3Label", e.target.value)} + placeholder="z.B. FOKUS" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs" + /> +
+
+ + updateProfileField("bioTag3Value", e.target.value)} + placeholder="z.B. Gefühl & Tiefe" + className="w-full px-2.5 py-1.5 bg-slate-900 border border-slate-800 rounded-lg text-white text-xs font-medium" + /> +
+
+
+
+ {/* Custom Domain & Routing Section */}
diff --git a/src/components/ClaraPortfolio.tsx b/src/components/ClaraPortfolio.tsx index 8247307..f502c78 100644 --- a/src/components/ClaraPortfolio.tsx +++ b/src/components/ClaraPortfolio.tsx @@ -108,27 +108,33 @@ export default function ClaraPortfolio({ data }: ClaraPortfolioProps) {
-
- -
-
Genre
-
Lyrik & Essays
+ {(data.bioTag1Label || data.bioTag1Value) && ( +
+ +
+
{data.bioTag1Label || "Genre"}
+
{data.bioTag1Value || "Lyrik & Essays"}
+
-
-
- -
-
Ästhetik
-
Natur & Poesie
+ )} + {(data.bioTag2Label || data.bioTag2Value) && ( +
+ +
+
{data.bioTag2Label || "Ästhetik"}
+
{data.bioTag2Value || "Natur & Poesie"}
+
-
-
- -
-
Fokus
-
Naturkontemplation
+ )} + {(data.bioTag3Label || data.bioTag3Value) && ( +
+ +
+
{data.bioTag3Label || "Fokus"}
+
{data.bioTag3Value || "Naturkontemplation"}
+
-
+ )}
diff --git a/src/components/EroticaPortfolio.tsx b/src/components/EroticaPortfolio.tsx index b61b82b..affc9b6 100644 --- a/src/components/EroticaPortfolio.tsx +++ b/src/components/EroticaPortfolio.tsx @@ -108,27 +108,33 @@ export default function EroticaPortfolio({ data }: EroticaPortfolioProps) {
-
- -
-
Genre
-
Sinnliche Romance
+ {(data.bioTag1Label || data.bioTag1Value) && ( +
+ +
+
{data.bioTag1Label || "Genre"}
+
{data.bioTag1Value || "Sinnliche Romance"}
+
-
-
- -
-
Tonalität
-
Elegant & Knisternd
+ )} + {(data.bioTag2Label || data.bioTag2Value) && ( +
+ +
+
{data.bioTag2Label || "Tonalität"}
+
{data.bioTag2Value || "Elegant & Knisternd"}
+
-
-
- -
-
Identität
-
Diskret / Pseudonym
+ )} + {(data.bioTag3Label || data.bioTag3Value) && ( +
+ +
+
{data.bioTag3Label || "Identität"}
+
{data.bioTag3Value || "Diskret / Pseudonym"}
+
-
+ )}
diff --git a/src/components/ReneePortfolio.tsx b/src/components/ReneePortfolio.tsx index 42382d9..78dca97 100644 --- a/src/components/ReneePortfolio.tsx +++ b/src/components/ReneePortfolio.tsx @@ -109,27 +109,33 @@ export default function ReneePortfolio({ data }: ReneePortfolioProps) {
-
- -
-
Genre
-
Emotionale Romance
+ {(data.bioTag1Label || data.bioTag1Value) && ( +
+ +
+
{data.bioTag1Label || "Genre"}
+
{data.bioTag1Value || "Emotionale Romance"}
+
-
-
- -
-
Tonalität
-
Herzlich & Hoffungsvoll
+ )} + {(data.bioTag2Label || data.bioTag2Value) && ( +
+ +
+
{data.bioTag2Label || "Tonalität"}
+
{data.bioTag2Value || "Herzlich & Hoffnungsvoll"}
+
-
-
- -
-
Fokus
-
Gefühl & Tiefe
+ )} + {(data.bioTag3Label || data.bioTag3Value) && ( +
+ +
+
{data.bioTag3Label || "Fokus"}
+
{data.bioTag3Value || "Gefühl & Tiefe"}
+
-
+ )}
diff --git a/src/components/SciFiPortfolio.tsx b/src/components/SciFiPortfolio.tsx index 2df5a0a..7917cc4 100644 --- a/src/components/SciFiPortfolio.tsx +++ b/src/components/SciFiPortfolio.tsx @@ -121,27 +121,33 @@ export default function SciFiPortfolio({ data }: SciFiPortfolioProps) {
-
- -
-
Fokus
-
Sci-Fi & Fantasy
+ {(data.bioTag1Label || data.bioTag1Value) && ( +
+ +
+
{data.bioTag1Label || "Fokus"}
+
{data.bioTag1Value || "Sci-Fi & Fantasy"}
+
-
-
- -
-
Welten
-
Techno-Magie
+ )} + {(data.bioTag2Label || data.bioTag2Value) && ( +
+ +
+
{data.bioTag2Label || "Welten"}
+
{data.bioTag2Value || "Techno-Magie"}
+
-
-
- -
-
Stil
-
Episch & Atmosphärisch
+ )} + {(data.bioTag3Label || data.bioTag3Value) && ( +
+ +
+
{data.bioTag3Label || "Stil"}
+
{data.bioTag3Value || "Episch & Atmosphärisch"}
+
-
+ )}
diff --git a/src/defaultData.ts b/src/defaultData.ts index e9c8123..48ea907 100644 --- a/src/defaultData.ts +++ b/src/defaultData.ts @@ -51,6 +51,12 @@ export const defaultAuthorData: AuthorData = { customSectionContent: "Besuchen Sie mich auf der nächsten Buchmesse am Stand für spekulative Phantastik. Ich freue mich auf den intergalaktischen Austausch mit meinen Leserinnen und Lesern!", badgeText: "Cyber-Mystisches Archive", aboutTitle: "Über den Autor", + bioTag1Label: "Fokus", + bioTag1Value: "Sci-Fi & Fantasy", + bioTag2Label: "Status", + bioTag2Value: "Aktiv Forschend", + bioTag3Label: "Archiv", + bioTag3Value: "Verschlüsselt", projectsTitle: "Aktuelle Projekte", projectsSubtitle: "Ein exklusiver Blick auf das, was sich gerade auf meinem Schreib-Amboss befindet.", booksTitle: "Bücherregal", @@ -115,6 +121,12 @@ export const defaultAuthorData: AuthorData = { customSectionContent: "Tragen Sie sich in meinen privaten Briefverteiler ein, um exklusive Einladungen zu meinen intimen Salon-Lesungen in Berlin und Wien zu erhalten. Die Plätze sind streng limitiert.", badgeText: "Stilvolle Sinnlichkeit & Romantik", aboutTitle: "Das Geheimnis hinter der Feder", + bioTag1Label: "Genre", + bioTag1Value: "Sinnliche Romance", + bioTag2Label: "Tonalität", + bioTag2Value: "Elegant & Knisternd", + bioTag3Label: "Identität", + bioTag3Value: "Diskret / Pseudonym", projectsTitle: "In der Entstehung", projectsSubtitle: "Ein Blick in mein privates Arbeitszimmer. Hier reifen neue Kapitel voller Leidenschaft.", booksTitle: "Das Samtregal", @@ -179,6 +191,12 @@ export const defaultAuthorData: AuthorData = { customSectionContent: "Auf meinen geführten Waldspaziergängen und Schreib-Retreats lade ich Sie ein, die Stille des Waldes neu zu erfahren und Ihre Gedanken auf das Papier fließen zu lassen. Schreiben Sie mir gern für Termine und Buchungsanfragen.", badgeText: "Lyrik, Essays & Naturphilosophie", aboutTitle: "Aus meiner Schreibstube", + bioTag1Label: "Genre", + bioTag1Value: "Lyrik & Essays", + bioTag2Label: "Ästhetik", + bioTag2Value: "Natur & Poesie", + bioTag3Label: "Fokus", + bioTag3Value: "Naturkontemplation", projectsTitle: "Laufende Notizen & Skizzen", projectsSubtitle: "Gedankenfragmente und Manuskripte, die leise im Winde reifen.", booksTitle: "Veröffentlichte Bände", @@ -243,6 +261,12 @@ export const defaultAuthorData: AuthorData = { customSectionContent: "Möchten Sie vorab Leseproben erhalten und mich auf meinem Schreibweg begleiten? Melden Sie sich für meine monatliche Herzenspost an!", badgeText: "Herzklopfen & Gefühlsstark", aboutTitle: "Über Renee Heart", + bioTag1Label: "Genre", + bioTag1Value: "Emotionale Romance", + bioTag2Label: "Tonalität", + bioTag2Value: "Herzlich & Hoffnungsvoll", + bioTag3Label: "Fokus", + bioTag3Value: "Gefühl & Tiefe", projectsTitle: "Aus der Schreibstube", projectsSubtitle: "Ein Blick auf meine aktuellen Geschichten in Entstehung – voller Hoffnung und Herzklopfen.", booksTitle: "Gefühlvolle Romane", diff --git a/src/types.ts b/src/types.ts index 8e90260..7fce673 100644 --- a/src/types.ts +++ b/src/types.ts @@ -36,6 +36,15 @@ export interface AuthorProfile { // Custom static texts badgeText?: string; aboutTitle?: string; + + // Dynamic Bio Highlights / Schlagworte (Über mich) + bioTag1Label?: string; + bioTag1Value?: string; + bioTag2Label?: string; + bioTag2Value?: string; + bioTag3Label?: string; + bioTag3Value?: string; + projectsTitle?: string; projectsSubtitle?: string; booksTitle?: string;