Bug preexistente (no introducido en esta sesion, solo expuesto): "/" se
prerenderizaba en build time dentro del Dockerfile, donde
HEADLESS_PROVIDER/MEDUSA_* no existen todavia (solo se inyectan en runtime
via el Deployment de k8s) -- el provider caia a "mock" y ese HTML quedaba
cacheado 1 año (confirmado en vivo: x-nextjs-prerender:1,
Cache-Control: s-maxage=31536000, x-nextjs-cache:HIT). El carrusel de
"Novedades" del home ya mostraba productos mock desde antes; recien se
noto con el nav data-driven de la sub-fase 2 porque las categorias mock
("Figuras"/"Peluches"/"Mochilas") son obviamente distintas a las reales.
/catalog y /product/[slug] no sufren esto porque ya son dinamicos
(searchParams / params fuerzan SSR).
export const dynamic = "force-dynamic" en app/page.tsx y app/layout.tsx
(el layout comparte el fetch del Navbar con TODAS las rutas -- forzarlo
ahi tambien protege contra que una pagina futura reintroduzca el mismo
bug). Decision del usuario: priorizar datos reales sobre el cacheo
estatico de 1 año.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013dunTcReWMKhWgCPkvAVHD
29 lines
1.7 KiB
TypeScript
29 lines
1.7 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import "./globals.css";
|
|
import { CartDrawer } from "@/components/cart/cart-drawer";
|
|
import { Footer } from "@/components/layout/footer";
|
|
import { Navbar } from "@/components/layout/navbar";
|
|
import { WishlistDrawer } from "@/components/wishlist/wishlist-drawer";
|
|
import { getCategories, getProducts } from "@/lib/headless/client";
|
|
|
|
// El Navbar (categorias/colecciones/predictive search) vive en este layout
|
|
// compartido -- si alguna pagina futura queda estatica, este fetch se
|
|
// congelaria con datos de build time (mock) igual que le paso al home
|
|
// (ver app/page.tsx). Forzarlo aca protege el nav en cualquier ruta, no
|
|
// solo en las que hoy ya son dinamicas por otro motivo (searchParams, etc.).
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "https://shop.cruzcloud.net"),
|
|
title: { default: "ARI Shopping | Juguetes, regalos y variedades", template: "%s | ARI Shopping" },
|
|
description: "Tienda online de juguetes, personajes, mochilas y regalos con atención personalizada.",
|
|
openGraph: { title: "ARI Shopping", description: "Tesoros para cada aventura.", type: "website", locale: "es_CO" },
|
|
};
|
|
|
|
export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#0f172a" };
|
|
|
|
export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
|
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
|
|
return <html lang="es"><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>;
|
|
}
|