diff --git a/apps/web/app/api/admin/banners/route.ts b/apps/web/app/api/admin/banners/route.ts index be01e6ffce..4cf1f7515e 100644 --- a/apps/web/app/api/admin/banners/route.ts +++ b/apps/web/app/api/admin/banners/route.ts @@ -25,15 +25,20 @@ export async function GET() { const auth = await requireAdmin(); if (!auth.ok) return auth.response; - const supabase = createSupabaseServiceRoleClient(); - const { data, error } = await supabase - .from("ad_banners") - .select(AD_BANNER_SELECT) - .order("priority", { ascending: false }); + try { + const supabase = createSupabaseServiceRoleClient(); + const { data, error } = await supabase + .from("ad_banners") + .select(AD_BANNER_SELECT) + .order("priority", { ascending: false }); - if (error) { + if (error) { + return NextResponse.json({ code: "banner_read_failed" }, { status: 500 }); + } + + return NextResponse.json({ banners: data ?? [] }); + } catch { return NextResponse.json({ code: "banner_read_failed" }, { status: 500 }); } - return NextResponse.json({ banners: data ?? [] }); } diff --git a/apps/web/app/home-app-globals.css b/apps/web/app/home-app-globals.css index 049b654924..fe59eb3e6c 100644 --- a/apps/web/app/home-app-globals.css +++ b/apps/web/app/home-app-globals.css @@ -20,6 +20,10 @@ @source "../lib/naver-map-overlay-position-helpers.ts"; @source "../lib/naver-map-overlay-timings.ts"; +html[data-home-chrome-ready="true"] [data-home-static-skeleton] { + display: none; +} + @media (max-width: 1279px) { html[data-mobile-search-open] .mobile-map-status-badge { display: none; diff --git a/apps/web/components/home/home-control-panel.tsx b/apps/web/components/home/home-control-panel.tsx index 9aeb798378..7b34c15b75 100644 --- a/apps/web/components/home/home-control-panel.tsx +++ b/apps/web/components/home/home-control-panel.tsx @@ -152,6 +152,12 @@ function HomeControlPanelComponent({ activeRightPanel = null, selectedAnnouncement = null, }: HomeControlPanelProps) { + useEffect(() => { + document.documentElement.dataset.homeChromeReady = "true"; + return () => { + delete document.documentElement.dataset.homeChromeReady; + }; + }, []); const { isMobileOrTablet } = useDeviceType(); const shouldRenderMobile = isMobileOrTablet || ( typeof window !== 'undefined' && window.innerWidth <= BREAKPOINTS.tabletMax