@@ -155,132 +47,202 @@ export default function HoroscopePage() {
-
-
-
{SIGNS[selected].symbol}
-
-
{SIGNS[selected].name}
-
{SIGNS[selected].date}
-
- Element: {SIGNS[selected].element}
- Planet: {SIGNS[selected].planet}
- Farbe: {SIGNS[selected].color}
- Stein: {SIGNS[selected].stone}
-
-
-
+ {(() => {
+ const sign = SIGNS[selected];
+ const ec = ELEMENT_COLORS[sign.element];
+ const horoscope = getHoroscope(selected);
+ const luckyNums = getLuckyNumbers(selected);
+ const dailyColor = getDailyColor(selected);
-
-
-
-
-
- Allgemein
-
-
{getHoroscope(selected).general}
-
-
-
-
- Liebe & Partnerschaft
-
-
{getHoroscope(selected).love}
-
-
-
-
-
-
-
-
-
-
- Beruf & Finanzen
-
-
{getHoroscope(selected).career}
-
-
-
-
- Gesundheit & Wohlbefinden
-
-
{getHoroscope(selected).health}
-
-
-
-
- 💡
- Tipp des Tages: {getHoroscope(selected).tip}
-
-
-
-
-
-
-
-
-
Weitere Sternzeichen entdecken
-
- {SIGNS.filter((_, i) => i !== selected).map((sign, i) => {
- const origIdx = SIGNS.findIndex(s => s.name === sign.name);
- return (
-
+
+
+
+ {tab === "daily" && (
+
+
+
+
+ Beruf & Finanzen
+
+
{horoscope.career}
+
+
+
+ Gesundheit & Wohlbefinden
+
+
{horoscope.health}
+
+
+
+
+ Tipp des Tages: {horoscope.tip}
+
+
+
+
+ )}
+
+
+
+
+
Weitere Sternzeichen entdecken
+
+ {SIGNS.filter((_, i) => i !== selected).map((s) => {
+ const origIdx = SIGNS.findIndex((x) => x.name === s.name);
+ const sEc = ELEMENT_COLORS[s.element];
+ return (
+
{ setSelected(origIdx); setTab("daily"); window.scrollTo({ top: 0, behavior: "smooth" }); }}
+ className={`${sEc.bg} hover:opacity-80 border ${sEc.border} rounded-lg p-3 transition-all text-left`}
+ data-testid={`button-sign-other-${s.name.toLowerCase()}`}
+ >
+
+ {s.symbol}
+ {s.name}
+
+ {s.date}
+
+ );
+ })}
+
+
+ >
+ );
+ })()}
)}
diff --git a/client/src/pages/recipes.tsx b/client/src/pages/recipes.tsx
new file mode 100644
index 0000000..dd8f479
--- /dev/null
+++ b/client/src/pages/recipes.tsx
@@ -0,0 +1,365 @@
+import { useState } from "react";
+import { Link } from "wouter";
+import { ChefHat, Clock, Users, X, ChevronLeft } from "lucide-react";
+import Header from "@/components/header";
+import Footer from "@/components/footer";
+import { InArticleAd } from "@/components/adsense";
+
+interface Recipe {
+ title: string;
+ image: string;
+ time: string;
+ servings: string;
+ ingredients: string[];
+ steps: string[];
+ description: string;
+ category: string;
+}
+
+interface RecipeRegion {
+ name: string;
+ recipes: Recipe[];
+}
+
+const RECIPE_REGIONS: RecipeRegion[] = [
+ {
+ name: "Österreich",
+ recipes: [
+ {
+ title: "Kaiserschmarrn",
+ image: "/uploads/recipe-kaiserschmarrn.png",
+ time: "25 Min.",
+ servings: "2 Portionen",
+ category: "Nachspeise",
+ description: "Der Klassiker der österreichischen Küche -- fluffig, süß und einfach unwiderstehlich.",
+ ingredients: ["3 Eier", "200 ml Milch", "120 g Mehl", "30 g Zucker", "1 Prise Salz", "50 g Butter", "Rosinen nach Belieben", "Puderzucker"],
+ steps: ["Eigelb, Milch, Mehl und Salz verrühren.", "Eiweiß mit Zucker steif schlagen und unterheben.", "Butter in der Pfanne erhitzen, Teig eingießen.", "Rosinen darüber streuen, von unten goldbraun backen.", "Mit zwei Gabeln in Stücke reißen.", "Mit Puderzucker bestreut servieren."],
+ },
+ {
+ title: "Wiener Schnitzel",
+ image: "/uploads/recipe-wiener-schnitzel.png",
+ time: "30 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Das berühmteste Gericht Wiens -- goldbraun paniert und herrlich knusprig.",
+ ingredients: ["4 Kalbsschnitzel", "2 Eier", "Mehl", "Semmelbrösel", "Butterschmalz", "Salz", "Zitrone"],
+ steps: ["Schnitzel dünn klopfen, salzen.", "In Mehl, verquirltem Ei und Semmelbröseln panieren.", "In reichlich heißem Butterschmalz goldbraun backen.", "Auf Küchenpapier abtropfen lassen.", "Mit Zitrone und Petersilienkartoffeln servieren."],
+ },
+ {
+ title: "Apfelstrudel",
+ image: "/uploads/recipe-apfelstrudel.png",
+ time: "60 Min.",
+ servings: "6 Portionen",
+ category: "Nachspeise",
+ description: "Dünn ausgezogener Strudelteig mit saftiger Apfelfüllung -- ein Traum aus Omas Küche.",
+ ingredients: ["250 g Mehl", "1 Ei", "2 EL Öl", "125 ml Wasser", "1 kg Äpfel", "100 g Zucker", "Zimt", "80 g Semmelbrösel", "80 g Butter"],
+ steps: ["Strudelteig kneten, 30 Min. ruhen lassen.", "Äpfel schälen, in dünne Scheiben schneiden.", "Mit Zucker, Zimt und Rosinen mischen.", "Teig dünn ausziehen, Brösel verteilen.", "Füllung auflegen, einrollen.", "Bei 180°C 40 Min. goldbraun backen."],
+ },
+ {
+ title: "Tiroler Knödel",
+ image: "/uploads/recipe-tiroler-knoedel.png",
+ time: "40 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Herzhafte Speckknödel aus Tirol -- perfekt zu einer kräftigen Suppe oder Sauerkraut.",
+ ingredients: ["300 g Knödelbrot", "200 ml Milch", "3 Eier", "150 g Speck", "1 Zwiebel", "Petersilie", "Salz, Pfeffer", "Mehl"],
+ steps: ["Knödelbrot in eine Schüssel geben, warme Milch darüber.", "Speck und Zwiebel anbraten.", "Eier, Speck, Petersilie zum Brot geben, mischen.", "30 Min. rasten lassen.", "Knödel formen, in Salzwasser 15 Min. kochen.", "Mit Butter und Schnittlauch servieren."],
+ },
+ {
+ title: "Sachertorte",
+ image: "/uploads/recipe-sachertorte.png",
+ time: "90 Min.",
+ servings: "8 Portionen",
+ category: "Nachspeise",
+ description: "Die weltberühmte Wiener Schokoladentorte mit Marillenmarmelade und Glasur.",
+ ingredients: ["150 g Butter", "110 g Zucker", "6 Eier", "130 g Zartbitterschokolade", "130 g Mehl", "Marillenmarmelade", "200 g Kuvertüre"],
+ steps: ["Butter und Zucker schaumig rühren.", "Geschmolzene Schokolade und Eigelb unterrühren.", "Eiweiß steif schlagen, mit Mehl unterheben.", "Bei 170°C 50 Min. backen.", "Auskühlen lassen, mit Marmelade bestreichen.", "Mit Schokoladen-Glasur überziehen."],
+ },
+ {
+ title: "Kärntner Kasnudeln",
+ image: "/uploads/recipe-kaerntner-kasnudeln.png",
+ time: "50 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Handgemachte Teigtaschen aus Kärnten mit Topfen-Kartoffel-Füllung und frischer Minze.",
+ ingredients: ["400 g Mehl", "2 Eier", "Wasser", "500 g Topfen", "200 g Kartoffeln", "Minze", "Kerbel", "Butter", "Salz"],
+ steps: ["Nudelteig aus Mehl, Eiern und Wasser herstellen.", "Kartoffeln kochen und stampfen.", "Mit Topfen, Minze und Kerbel mischen.", "Teig ausrollen, Kreise ausstechen.", "Füllung aufsetzen, Ränder krendeln.", "In Salzwasser kochen, mit Butter servieren."],
+ },
+ {
+ title: "Germknödel",
+ image: "/uploads/recipe-germknoedel.png",
+ time: "120 Min.",
+ servings: "4 Portionen",
+ category: "Nachspeise",
+ description: "Fluffige Hefeteig-Knödel mit Powidl-Füllung, Vanillesoße und Mohn-Zucker-Topping.",
+ ingredients: ["500 g Mehl", "250 ml Milch", "1 Würfel Hefe", "60 g Zucker", "60 g Butter", "2 Eigelb", "Powidl (Pflaumenmus)", "Mohn", "Vanillesoße"],
+ steps: ["Hefeteig zubereiten und 1 Stunde gehen lassen.", "Teig in Portionen teilen, flach drücken.", "Je 1 TL Powidl in die Mitte geben.", "Zu Knödeln formen, nochmals 20 Min. gehen lassen.", "In Salzwasser oder über Dampf 15 Min. garen.", "Mit Mohn-Zucker und Vanillesoße servieren."],
+ },
+ {
+ title: "Tafelspitz",
+ image: "/uploads/recipe-tafelspitz.png",
+ time: "180 Min.",
+ servings: "6 Portionen",
+ category: "Hauptspeise",
+ description: "Zart gekochtes Rindfleisch mit Schnittlauchsoße und Apfelkren -- ein Festmahl der Wiener Küche.",
+ ingredients: ["1,5 kg Tafelspitz", "Suppengemüse", "Lorbeerblatt", "Pfefferkörner", "Schnittlauch", "Sauerrahm", "Äpfel", "Kren (Meerrettich)"],
+ steps: ["Fleisch in kaltes Wasser legen, langsam erhitzen.", "Schaum abschöpfen, Gemüse und Gewürze zugeben.", "3 Stunden sanft köcheln lassen.", "Schnittlauchsoße aus Sauerrahm zubereiten.", "Apfelkren frisch reiben und mischen.", "Fleisch aufschneiden, mit Soßen und Gemüse servieren."],
+ },
+ ],
+ },
+ {
+ name: "Bayern",
+ recipes: [
+ {
+ title: "Schweinshaxe",
+ image: "/uploads/recipe-schweinshaxe.png",
+ time: "180 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Knusprig gebratene Schweinshaxe mit krachender Kruste -- das Herzstück jeder bayerischen Wirtschaft.",
+ ingredients: ["4 Schweinshaxen", "2 Zwiebeln", "2 Karotten", "500 ml Dunkelbier", "Kümmel", "Knoblauch", "Salz, Pfeffer", "Majoran"],
+ steps: ["Haxen waschen, Schwarte rautenförmig einschneiden.", "Mit Salz, Kümmel und Knoblauch einreiben.", "Mit Gemüse und Bier in die Bratpfanne geben.", "Bei 180°C ca. 2,5 Stunden braten.", "Regelmäßig mit Bratensud übergießen.", "Zum Schluss Grill zuschalten für knusprige Kruste."],
+ },
+ {
+ title: "Obatzda",
+ image: "/uploads/recipe-obatzda.png",
+ time: "15 Min.",
+ servings: "4 Portionen",
+ category: "Vorspeise",
+ description: "Der bayerische Biergarten-Klassiker -- würziger Camembert-Aufstrich mit Brezn.",
+ ingredients: ["200 g reifer Camembert", "100 g Frischkäse", "1 kleine Zwiebel", "1 EL Butter", "Paprikapulver", "Kümmel", "Salz, Pfeffer", "Schnittlauch"],
+ steps: ["Camembert mit einer Gabel zerdrücken.", "Frischkäse und weiche Butter untermischen.", "Fein gehackte Zwiebel dazugeben.", "Mit Paprika, Kümmel, Salz und Pfeffer würzen.", "Mindestens 1 Stunde durchziehen lassen.", "Mit Schnittlauch bestreut zu frischen Brezn servieren."],
+ },
+ {
+ title: "Dampfnudeln",
+ image: "/uploads/recipe-dampfnudeln.png",
+ time: "90 Min.",
+ servings: "4 Portionen",
+ category: "Nachspeise",
+ description: "Bayerische Dampfnudeln mit goldener Kruste und Vanillesoße -- wie bei der Oma auf dem Bauernhof.",
+ ingredients: ["500 g Mehl", "250 ml Milch", "1 Würfel Hefe", "80 g Zucker", "80 g Butter", "2 Eier", "1 Prise Salz", "Vanillesoße"],
+ steps: ["Hefe in lauwarmer Milch auflösen.", "Mit Mehl, Zucker, Eiern und Butter zu einem Teig kneten.", "1 Stunde gehen lassen, bis sich das Volumen verdoppelt.", "Kugeln formen und nochmals 20 Min. ruhen lassen.", "In einem geschlossenen Topf mit Milch-Butter-Gemisch dämpfen.", "Servieren, wenn die Kruste goldbraun knistert."],
+ },
+ {
+ title: "Käsespätzle",
+ image: "/uploads/recipe-kaesespaetzle.png",
+ time: "45 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Handgeschabte Spätzle mit würzigem Bergkäse und knusprigen Röstzwiebeln -- ein Allgäuer Traum.",
+ ingredients: ["400 g Mehl", "4 Eier", "200 ml Wasser", "300 g Bergkäse", "3 große Zwiebeln", "Butter", "Salz, Pfeffer", "Muskatnuss"],
+ steps: ["Mehl, Eier, Wasser und Salz zu einem zähen Teig schlagen.", "Durch ein Spätzlebrett in kochendes Salzwasser schaben.", "Wenn die Spätzle oben schwimmen, abschöpfen.", "Zwiebeln in Butter goldbraun rösten.", "Spätzle und geriebenen Käse schichtweise in eine Form geben.", "Mit Röstzwiebeln krönen und kurz überbacken."],
+ },
+ ],
+ },
+ {
+ name: "Schwaben & Baden",
+ recipes: [
+ {
+ title: "Maultaschen",
+ image: "/uploads/recipe-maultaschen.png",
+ time: "90 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Schwäbische Herrgottsbscheißerle -- gefüllte Teigtaschen, die einst das Fleisch vor Gott versteckten.",
+ ingredients: ["Nudelteig (400 g Mehl, 4 Eier)", "300 g Hackfleisch", "200 g Spinat", "1 Brötchen", "1 Zwiebel", "2 Eier", "Petersilie", "Muskatnuss, Salz, Pfeffer"],
+ steps: ["Nudelteig kneten und 30 Min. ruhen lassen.", "Brötchen einweichen, Spinat blanchieren und hacken.", "Hackfleisch, Spinat, Brötchen, Eier und Gewürze mischen.", "Teig dünn ausrollen, Füllung in Häufchen setzen.", "Zuklappen, Taschen ausschneiden, Ränder fest andrücken.", "In kräftiger Brühe 10 Min. ziehen lassen oder anbraten."],
+ },
+ {
+ title: "Zwiebelrostbraten",
+ image: "/uploads/recipe-zwiebelrostbraten.png",
+ time: "40 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Saftiges Rostbraten-Stück mit einem Berg goldener Röstzwiebeln -- der schwäbische Sonntagsklassiker.",
+ ingredients: ["4 Scheiben Roastbeef (je 200 g)", "6 große Zwiebeln", "3 EL Mehl", "Butterschmalz", "200 ml Brühe", "Salz, Pfeffer", "1 Schuss Rotwein"],
+ steps: ["Zwiebeln in Ringe schneiden, in Mehl wenden.", "In heißem Butterschmalz goldbraun und knusprig frittieren.", "Fleisch salzen, pfeffern und scharf anbraten.", "Fleisch herausnehmen und warm halten.", "Bratensatz mit Rotwein und Brühe ablöschen.", "Fleisch mit Soße und einem Berg Röstzwiebeln servieren."],
+ },
+ {
+ title: "Flammkuchen",
+ image: "/uploads/recipe-flammkuchen.png",
+ time: "30 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Hauchdünner elsässisch-badischer Flammkuchen mit Crème fraîche, Speck und Zwiebeln.",
+ ingredients: ["300 g Mehl", "150 ml Wasser", "3 EL Öl", "200 g Crème fraîche", "200 g Speck", "3 Zwiebeln", "Salz, Pfeffer", "Muskatnuss"],
+ steps: ["Mehl, Wasser, Öl und Salz zu einem dünnen Teig kneten.", "Sehr dünn ausrollen auf einem bemehlten Blech.", "Crème fraîche gleichmäßig verstreichen.", "Mit dünnen Zwiebelringen und Speckwürfeln belegen.", "Bei 250°C auf unterster Schiene 12-15 Min. backen.", "Sofort heiß servieren, am besten mit einem Glas Weißwein."],
+ },
+ ],
+ },
+ {
+ name: "Südtirol & Alpen",
+ recipes: [
+ {
+ title: "Schlutzkrapfen",
+ image: "/uploads/recipe-schlutzkrapfen.png",
+ time: "60 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Südtiroler Halbmond-Teigtaschen mit Spinat-Ricotta-Füllung und brauner Butter.",
+ ingredients: ["300 g Roggenmehl", "100 g Weizenmehl", "3 Eier", "Wasser", "400 g Spinat", "200 g Ricotta", "1 Zwiebel", "Butter, Parmesan, Salbei"],
+ steps: ["Roggen- und Weizenmehl mit Eiern und Wasser verkneten.", "30 Min. ruhen lassen.", "Spinat dünsten, hacken, mit Ricotta und Zwiebel mischen.", "Teig dünn ausrollen, Kreise ausstechen.", "Füllung aufsetzen, zu Halbmonden falten, Ränder fest drücken.", "In Salzwasser kochen, mit brauner Salbeibutter und Parmesan servieren."],
+ },
+ {
+ title: "Sauerbraten",
+ image: "/uploads/recipe-sauerbraten.png",
+ time: "240 Min.",
+ servings: "6 Portionen",
+ category: "Hauptspeise",
+ description: "Tagelang marinierter Schmorbraten mit dunkler Soße -- das Geduldsgericht der deutschen Küche.",
+ ingredients: ["1,5 kg Rindfleisch", "500 ml Rotweinessig", "500 ml Wasser", "2 Zwiebeln", "Lorbeer, Nelken, Piment", "Wacholderbeeren", "3 EL Lebkuchengewürz", "Rosinen"],
+ steps: ["Fleisch 3-5 Tage in Essig-Wasser-Marinade mit Gewürzen einlegen.", "Fleisch herausnehmen, trocken tupfen, scharf anbraten.", "Mit gefilterter Marinade ablöschen.", "Bei 160°C 3 Stunden schmoren.", "Soße mit Lebkuchen-Bröseln und Rosinen binden.", "Mit Kartoffelklößen und Rotkraut servieren."],
+ },
+ {
+ title: "Schwarzwälder Kirschtorte",
+ image: "/uploads/recipe-schwarzwaelder-kirschtorte.png",
+ time: "120 Min.",
+ servings: "12 Portionen",
+ category: "Nachspeise",
+ description: "Die Königin der deutschen Torten -- Schokolade, Kirschen, Sahne und ein Schuss Kirschwasser.",
+ ingredients: ["6 Eier", "200 g Zucker", "150 g Mehl", "50 g Kakao", "80 g Butter", "1 Glas Sauerkirschen", "600 ml Sahne", "Kirschwasser", "Schokoraspeln"],
+ steps: ["Biskuit aus Eiern, Zucker, Mehl, Kakao und Butter backen.", "Auskühlen lassen und in 3 Böden schneiden.", "Böden mit Kirschwasser tränken.", "Sahne steif schlagen, zwischen die Böden streichen.", "Kirschen auf die Schichten verteilen.", "Torte mit Sahne, Schokoraspeln und Kirschen dekorieren."],
+ },
+ ],
+ },
+ {
+ name: "Norddeutschland",
+ recipes: [
+ {
+ title: "Grünkohl mit Pinkel",
+ image: "/uploads/recipe-gruenkohl.png",
+ time: "120 Min.",
+ servings: "6 Portionen",
+ category: "Hauptspeise",
+ description: "Norddeutscher Winterklassiker -- deftiger Grünkohl mit geräucherter Pinkelwurst nach dem ersten Frost.",
+ ingredients: ["1,5 kg frischer Grünkohl", "4 Pinkelwürste", "250 g Kasseler", "250 g durchwachsener Speck", "2 Zwiebeln", "Schmalz", "Haferflocken", "Senf"],
+ steps: ["Grünkohl waschen, Stiele entfernen und grob hacken.", "Zwiebeln in Schmalz anbraten, Grünkohl zugeben.", "Mit Brühe aufgießen, Speck und Kasseler einlegen.", "90 Min. köcheln lassen, gelegentlich umrühren.", "Pinkelwürste in den letzten 30 Min. mitgaren.", "Mit Haferflocken binden, mit Senf und Bratkartoffeln servieren."],
+ },
+ {
+ title: "Kartoffelpuffer",
+ image: "/uploads/recipe-kartoffelpuffer.png",
+ time: "30 Min.",
+ servings: "4 Portionen",
+ category: "Hauptspeise",
+ description: "Goldbraun gebratene Kartoffelreibekuchen -- ob süß mit Apfelmus oder herzhaft mit Lachs.",
+ ingredients: ["1 kg festkochende Kartoffeln", "1 Zwiebel", "2 Eier", "3 EL Mehl", "Salz, Pfeffer", "Muskatnuss", "Öl zum Braten", "Apfelmus"],
+ steps: ["Kartoffeln und Zwiebel fein reiben.", "Überschüssige Flüssigkeit gut ausdrücken.", "Mit Eiern, Mehl, Salz und Muskatnuss verrühren.", "In heißem Öl löffelweise flache Puffer braten.", "Von beiden Seiten goldbraun und knusprig backen.", "Auf Küchenpapier abtropfen, mit Apfelmus servieren."],
+ },
+ ],
+ },
+];
+
+function RecipeModal({ recipe, onClose }: { recipe: Recipe; onClose: () => void }) {
+ return (
+
+
e.stopPropagation()}
+ >
+
+

+
+
+
+
+ {recipe.category}
+
+
+
+
{recipe.title}
+
{recipe.description}
+
+ {recipe.time}
+ {recipe.servings}
+
+
+
Zutaten
+
+ {recipe.ingredients.map((ing, i) => (
+ -
+ •{ing}
+
+ ))}
+
+
+
Zubereitung
+
+ {recipe.steps.map((step, i) => (
+ -
+ {i + 1}.{step}
+
+ ))}
+
+
+
+
+ );
+}
+
+export default function RecipesPage() {
+ const [selectedRecipe, setSelectedRecipe] = useState
(null);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ Legendäre Bauernküche
+
+
+
+ Traditionelle Rezepte aus den germanischen Regionen -- von der Alm bis zur Küste, von der Oma überliefert.
+
+
+ {RECIPE_REGIONS.map((region, ri) => (
+
+
+
+
+ {region.recipes.map((recipe, i) => (
+
setSelectedRecipe(recipe)}
+ className="bg-card rounded-xl border border-card-border overflow-hidden text-left group hover:border-primary/50 transition-all hover:shadow-lg hover:shadow-primary/5"
+ data-testid={`card-recipe-${ri}-${i}`}
+ >
+
+

+
+
+ {recipe.category}
+
+
+
+
{recipe.title}
+
{recipe.description}
+
+ {recipe.time}
+ {recipe.servings}
+
+
+
+ ))}
+
+
+ {ri % 2 === 0 &&
}
+
+ ))}
+
+
+
+ {selectedRecipe &&
setSelectedRecipe(null)} />}
+
+ );
+}
diff --git a/replit.md b/replit.md
index 4292b2f..7f50075 100644
--- a/replit.md
+++ b/replit.md
@@ -1,7 +1,7 @@
# news.folx.tv - MSN-Style News Portal
## Overview
-A professional MSN-style news portal for Folx Music Television (news.folx.tv). Dark-themed bento grid layout with content for folk music (Volksmusik/Schlager) fans. Features articles, videos, photo gallery, horoscope widget, recipe widget, Google News feed, and integrated AdSense ads. All content is hardcoded in seed for production deployments.
+A professional MSN-style news portal for Folx Music Television (news.folx.tv). Dark-themed bento grid layout with content for folk music (Volksmusik/Schlager) fans. Features articles, videos, photo gallery, horoscope widget + subpage, recipe widget + subpage, Google News feed, and integrated AdSense ads. All content is hardcoded in seed for production deployments.
## Architecture
- **Frontend**: React + Vite + TailwindCSS + shadcn/ui (dark mode)
@@ -10,11 +10,12 @@ A professional MSN-style news portal for Folx Music Television (news.folx.tv). D
- **Routing**: wouter (frontend), Express (backend API)
## Key Features
-- MSN-style bento grid homepage with FeaturedCarousel, HeroCard, MediumCard, TopStoriesList
-- Photo gallery widget (156 Dropbox images) with fullscreen lightbox carousel
-- Horoscope widget (12 zodiac signs, daily rotating texts)
-- Recipe widget (6 Austrian/Slovenian recipes with modal)
-- Google News RSS widget (Volksmusik/Schlager news)
+- MSN-style bento grid homepage with mixed article/widget layout
+- FeaturedCarousel with 5 article pages (page 2 = wide layout) + gallery page
+- Photo gallery widget (547 Dropbox images) with fullscreen lightbox carousel
+- Horoscope widget with element colors, star ratings, full /horoskop subpage
+- Recipe widget + full /rezepte subpage (21 recipes across 5 regions: Österreich, Bayern, Schwaben/Baden, Südtirol/Alpen, Norddeutschland) with AI-generated images
+- Google News RSS widget (Volksmusik/Schlager news, 5 items, auto-rotate)
- Google AdSense integration (ca-pub-4465464714854276)
- Article listing with featured carousel and category filtering
- HTML content supports embedded iframes (bunny.net, YouTube, Facebook, Instagram, TikTok)
@@ -36,27 +37,39 @@ A professional MSN-style news portal for Folx Music Television (news.folx.tv). D
- `POST /api/upload` - Upload image file
- `GET /api/gallery` - Shuffled Dropbox gallery images
- `GET /api/news-feed` - Google News RSS feed for Volksmusik/Schlager
+- `GET /api/videos` - BunnyCDN video list
+- `GET /api/videos/:guid` - BunnyCDN video details
## File Structure
- `shared/schema.ts` - Drizzle schema + Zod validation
- `server/db.ts` - Database connection
- `server/storage.ts` - Storage interface + DatabaseStorage
- `server/routes.ts` - API routes + gallery + news feed
-- `server/seed.ts` - Hardcoded seed data (7 articles)
-- `server/gallery-data.json` - 156 Dropbox gallery images
+- `server/seed.ts` - Hardcoded seed data (articles)
+- `server/gallery-data.json` - 547 Dropbox gallery images
- `client/src/pages/home.tsx` - MSN-style bento grid homepage
- `client/src/pages/article.tsx` - Article detail page
- `client/src/pages/category.tsx` - Category listing page
- `client/src/pages/videos.tsx` - Videos page
- `client/src/pages/gallery.tsx` - Full gallery page
-- `client/src/components/header.tsx` - Header with nav (Start, News, Video, Galerie)
+- `client/src/pages/horoscope.tsx` - Full horoscope page (12 signs, love/career/health, weekly/monthly)
+- `client/src/pages/recipes.tsx` - Full recipes page (21 recipes, 5 regions, AI-generated images)
+- `client/src/lib/horoscope-data.ts` - Shared horoscope data (signs, texts, helpers)
+- `client/src/components/header.tsx` - Header with nav (Start, News, Video, Galerie, Horoskop, Rezepte)
- `client/src/components/footer.tsx` - Footer with links
- `client/src/components/photo-gallery.tsx` - Gallery widget + lightbox carousel
-- `client/src/components/horoscope-widget.tsx` - Horoscope widget
-- `client/src/components/recipe-widget.tsx` - Recipe widget
+- `client/src/components/horoscope-widget.tsx` - Horoscope widget with element colors
+- `client/src/components/recipe-widget.tsx` - Recipe widget with modal
- `client/src/components/news-widget.tsx` - Google News RSS widget
- `client/src/components/adsense.tsx` - AdSense ad components
+## Homepage Layout (MSN Bento Grid)
+- Row 1: FeaturedCarousel (hero + side articles + TopStorys, page 2 = wide hero)
+- Row 2: 2 articles + PhotoGalleryWidget + RecipeWidget (mixed)
+- Row 3: HoroscopeWidget + 2 articles + NewsWidget (mixed)
+- Row 4: 3 articles + NativeAdCard
+- Row 5: 3 articles + NativeAdCard
+
## Branding
- Dark theme (class="dark" on html)
- Primary/brand color: crimson/red (RGB 218,35,77)
@@ -67,5 +80,12 @@ A professional MSN-style news portal for Folx Music Television (news.folx.tv). D
## External Services
- Bunny.net: Library 476412, CDN vz-7982dfc4-cc8.b-cdn.net (NO autoplay)
- Google AdSense: ca-pub-4465464714854276
-- Dropbox: Gallery image thumbnails
+- Dropbox: Gallery image thumbnails (547 images from 16 folders)
- Google News RSS: Volksmusik/Schlager news feed
+
+## Important Notes
+- Tailwind `object-[center_25%]` does NOT work — must use inline `style={{ objectPosition: "center 25%" }}`
+- Horoscope widget navigates to /horoskop on click (no modal)
+- News widget external links open in new tab (target="_blank")
+- FeaturedCarousel: page 1 = wide (5 cols, no side cards), last page = gallery
+- All images use `objectPosition: "center 25%"` for better face cropping
diff --git a/server/seed.ts b/server/seed.ts
index 51188a7..e546d77 100644
--- a/server/seed.ts
+++ b/server/seed.ts
@@ -79,6 +79,17 @@ const seedArticles = [
"featured": false,
"publishedAt": "2025-08-31T14:29:00.000Z",
"content": "Eine faszinierende Dokumentation über die Oberkrainer aus Begunje und die Geschichte ihres legendären Liedes. Tauchen Sie ein in die Welt der slowenischen Volksmusik und erfahren Sie, wie diese einzigartige Musiktradition entstanden ist.
\n\nDie Oberkrainer Musik, begründet von Slavko Avsenik in den 1950er Jahren, hat sich zu einem Weltphänomen entwickelt. Diese Dokumentation erzählt die Geschichte hinter den Melodien, die Millionen von Menschen auf der ganzen Welt berührt haben.
"
+ },
+ {
+ "title": "Melanie Payer präsentiert den neuen Song „Endlich wieder Gipfelstammtisch“",
+ "slug": "melanie-payer-endlich-wieder-gipfelstammtisch",
+ "excerpt": "Die talentierte Sängerin Melanie Payer bringt mit ihrem neuen Titel „Endlich wieder Gipfelstammtisch“ frischen Wind in die Musikwelt. Der Song markiert die erste Veröffentlichung des Labels mymusic.media und ist das Herzstück der neuen Staffel der beliebten Sendung auf Folx TV.",
+ "category": "News",
+ "author": "Folx Music Television",
+ "coverImage": "/uploads/melanie-payer-gipfelstammtisch.jpg",
+ "featured": true,
+ "publishedAt": "2025-09-05T10:00:00.000Z",
+ "content": "Die talentierte Sängerin Melanie Payer bringt mit ihrem neuen Titel „Endlich wieder Gipfelstammtisch“ frischen Wind in die Musikwelt. Der Song wird ab dem 27. September 2024 zum Streaming und Download verfügbar sein und markiert die erste Veröffentlichung des Labels mymusic.media.
\n\nDie Schaffung dieser musikalischen Perle fand im renommierten Tonstudio FD-Musics in Gmunden statt. Der Song wurde von Flo Daxner und Hanneliese Kreißl Wurth komponiert, die auch die Texte verfasste. Flo Daxner übernahm zudem die Produktion und das Arrangement, was dem Lied seine einzigartige Klangtiefe verleiht.
\n\n„Endlich wieder Gipfelstammtisch“ ist das Herzstück der neuen Staffel der beliebten Sendung „Gipfelstammtisch“ auf Folx TV. Moderiert von dem charismatischen Wijbrand van der Sande, verspricht die Show, Zuschauer mit einzigartigen Einblicken und der bezaubernden Volksmusik der Wilder Kaiser Region zu fesseln. Der Song nimmt Zuhörer auf eine musikalische Reise mit, die die Magie der Berge und der Volksmusik in jedem Ton spürbar macht.
\n\nFolx TV setzt sich für innovative Unterhaltung und Musik ein. Die neue Staffel des Gipfelstammtischs und der Song von Melanie Payer sind mit Spannung erwartet. Verpassen Sie nicht die neue Staffel und erleben Sie den Song und den Gipfelstammtisch hautnah!
"
}
];