Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
- import {
- Outlet,
- Link,
- createRootRouteWithContext,
- useRouter,
- HeadContent,
- Scripts,
- } from "@tanstack/react-router";
- import { useEffect, type ReactNode } from "react";
- import appCss from "../styles.css?url";
- import { reportLovableError } from "../lib/lovable-error-reporting";
- const SITE_NAME = "KINO EDITORIAL DEUTSCHLAND";
- function NotFoundComponent() {
- return (
- <div className="flex min-h-screen items-center justify-center bg-background px-4">
- <div className="max-w-md text-center">
- <h1 className="text-7xl font-bold">404</h1>
- <p className="mt-4 text-muted-foreground">Seite nicht gefunden.</p>
- <Link to="/" className="mt-6 inline-block underline">Zurück zur Startseite</Link>
- </div>
- </div>
- );
- }
- function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) {
- const router = useRouter();
- useEffect(() => {
- reportLovableError(error, { boundary: "tanstack_root_error_component" });
- }, [error]);
- return (
- <div className="flex min-h-screen items-center justify-center px-4">
- <div className="max-w-md text-center">
- <h1 className="text-xl font-semibold">Ein Fehler ist aufgetreten</h1>
- <button
- onClick={() => { router.invalidate(); reset(); }}
- className="mt-6 underline"
- >Erneut versuchen</button>
- </div>
- </div>
- );
- }
- function Histats() {
- useEffect(() => {
- (window as any)._Hasync = (window as any)._Hasync || [];
- (window as any)._Hasync.push([
- "Histats.start",
- "1,5014113,0,0,0,0,00000000",
- ]);
- (window as any)._Hasync.push(["Histats.fasi", "1"]);
- (window as any)._Hasync.push(["Histats.track_hits", ""]);
- const script = document.createElement("script");
- script.src = "https://s10.histats.com/js15_as.js";
- script.async = true;
- document.body.appendChild(script);
- return () => {
- script.remove();
- };
- }, []);
- return (
- <div style={{ display: "none" }}>
- <div id="histats_counter"></div>
- <noscript>
- <a href="/">
- <img
- src="https://sstatic1.histats.com/0.gif?5014113&101"
- alt="Histats"
- border={0}
- />
- </a>
- </noscript>
- </div>
- );
- }
- export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()({
- head: () => ({
- meta: [
- { charSet: "utf-8" },
- { name: "viewport", content: "width=device-width, initial-scale=1" },
- { property: "og:type", content: "article" },
- { property: "og:site_name", content: SITE_NAME },
- { name: "twitter:card", content: "summary_large_image" },
- { name: "google-site-verification", content: "f9QvvK0LCyE7g6jlpe2HFnbch6-eF3FLIhKuPM9g59M" },
- { title: "Spider-Man: Brand New Day (2026) – Exklusive Details, Besetzung & News" },
- { property: "og:title", content: "Spider-Man: Brand New Day (2026) – Der neue Marvel-Blockbuster" },
- { name: "twitter:title", content: "Spider-Man: Brand New Day (2026) – Exklusive Film-News" },
- { name: "description", content: "Erfahren Sie alles über Spider-Man: Brand New Day (2026). Exklusive Einblicke in die Besetzung mit Tom Holland, Produktionsdetails, Budget und offizielle Kinostart-Gerüchte in Deutschland." },
- { property: "og:description", content: "Detaillierte Analyse und neueste Informationen zum kommenden Spider-Man 4. Besetzung, Handlung und Hintergründe zum Marvel-Highlight 2026." },
- { name: "twitter:description", content: "Aktuelle News zu Spider-Man: Brand New Day (2026). Alles, was Sie über den neuen Marvel-Blockbuster wissen müssen." },
- { name: "keywords", content: "Spider-Man 4, Brand New Day 2026, Marvel Deutschland, Tom Holland, Zendaya, Filmkritik, MCU Phase 6, Kinostart 2026" },
- { property: "og:image", content: "https://images.tmdb.org/t/p/original/mBa33S596pBuhC9otMTZpS3C1oA.jpg" },
- { name: "twitter:image", content: "https://images.tmdb.org/t/p/original/mBa33S596pBuhC9otMTZpS3C1oA.jpg" },
- ],
- links: [
- { rel: "stylesheet", href: appCss },
- { rel: "icon", href: "/favicon.ico", type: "image/x-icon" },
- { rel: "preconnect", href: "https://fonts.googleapis.com" },
- { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "anonymous" },
- { rel: "stylesheet", href: "https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700;900&family=Inter:wght@300;400;500;600;700&display=swap" },
- ],
- scripts: [
- {
- type: "application/ld+json",
- children: JSON.stringify({
- "@context": "https://schema.org",
- "@type": "NewsArticle",
- "headline": "Spider-Man: Brand New Day (2026) – Exklusive Details und Besetzung",
- "image": ["https://images.tmdb.org/t/p/original/mBa33S596pBuhC9otMTZpS3C1oA.jpg"],
- "datePublished": "2024-05-14T08:00:00+08:00",
- "author": [{
- "@type": "Person",
- "name": "Redaktion",
- "url": "https://kinonews24de.up.railway.app"
- }]
- }),
- },
- ],
- }),
- shellComponent: RootShell,
- component: RootComponent,
- notFoundComponent: NotFoundComponent,
- errorComponent: ErrorComponent,
- });
- function RootShell({ children }: { children: ReactNode }) {
- return (
- <html lang="de">
- <head><HeadContent /></head>
- <body>
- {children}
- <Histats />
- <Scripts />
- </body>
- </html>
- );
- }
- function RootComponent() {
- const { queryClient } = Route.useRouteContext();
- useEffect(() => {
- // Histats
- (window as any)._Hasync = (window as any)._Hasync || [];
- (window as any)._Hasync.push(["Histats.start", "1,4925760,4,0,0,0,00010000"]);
- const hs = document.createElement("script");
- hs.type = "text/javascript";
- hs.async = true;
- hs.src = "https://s10.histats.com/js15_as.js";
- document.body.appendChild(hs);
- // Adsterra global (social bar / popunder)
- const globalAds = [
- "https://pl30414546.effectivecpmnetwork.com/32/8e/48/328e48a141a04d4779bf7ce01917f31f.js",
- "https://pl30414547.effectivecpmnetwork.com/85/fe/e9/85fee95a99292ac49c9255203f17ecc6.js",
- ];
- globalAds.forEach((src) => {
- const s = document.createElement("script");
- s.type = "text/javascript";
- s.src = src;
- s.async = true;
- document.body.appendChild(s);
- });
- }, []);
- return (
- <QueryClientProvider client={queryClient}>
- <div className="min-h-screen flex flex-col bg-background text-foreground">
- <header className="border-b border-border bg-paper">
- <div className="max-w-5xl mx-auto px-6 py-8 text-center">
- <div className="text-[0.65rem] tracking-[0.35em] text-muted-foreground uppercase mb-3">
- Ausgabe · Kino & Kultur · {new Date().toLocaleDateString("de-DE", { day: "2-digit", month: "long", year: "numeric" })}
- </div>
- <Link to="/" className="block">
- <h1 className="font-serif text-4xl md:text-6xl font-black tracking-tight text-ink">
- {SITE_NAME}
- </h1>
- </Link>
- <div className="mt-3 flex items-center justify-center gap-3 text-[0.6rem] tracking-[0.3em] uppercase text-muted-foreground">
- <span className="h-px w-12 bg-border" />
- <span>Premium Filmjournalismus</span>
- <span className="h-px w-12 bg-border" />
- </div>
- </div>
- </header>
- <main className="flex-1">
- <Outlet />
- </main>
- <footer className="border-t border-border bg-paper mt-16">
- <div className="max-w-5xl mx-auto px-6 py-10">
- <div className="flex flex-wrap items-center justify-center gap-6 text-sm mb-6">
- <Link to="/about" className="text-ink hover:text-accent underline-offset-4 hover:underline">Über uns</Link>
- <span className="text-border">·</span>
- <Link to="/disclaimer" className="text-ink hover:text-accent underline-offset-4 hover:underline">Haftungsausschluss</Link>
- <span className="text-border">·</span>
- <Link to="/privacy" className="text-ink hover:text-accent underline-offset-4 hover:underline">Datenschutz</Link>
- </div>
- <p className="text-center text-xs text-muted-foreground tracking-wide">
- © {new Date().getFullYear()} {SITE_NAME}. Alle Rechte vorbehalten.
- </p>
- </div>
- </footer>
- </div>
- </QueryClientProvider>
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment