diff --git a/netlify.toml b/netlify.toml
index b55707ebb..948b3748f 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -7,3 +7,29 @@
[functions]
directory = "netlify/functions"
+
+# Cache headers for static assets
+[[headers]]
+ for = "/fonts/*"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
+
+[[headers]]
+ for = "/logos/*"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
+
+[[headers]]
+ for = "/assets/*.js"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
+
+[[headers]]
+ for = "/assets/*.css"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
+
+[[headers]]
+ for = "/*.woff2"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
diff --git a/src/components/ShowcaseCard.tsx b/src/components/ShowcaseCard.tsx
index 6fd3a58cc..a557dbba6 100644
--- a/src/components/ShowcaseCard.tsx
+++ b/src/components/ShowcaseCard.tsx
@@ -46,6 +46,7 @@ export function ShowcaseCard({
{/* Logo overlay */}
@@ -54,6 +55,7 @@ export function ShowcaseCard({
diff --git a/src/components/TrustedByMarquee.tsx b/src/components/TrustedByMarquee.tsx
index e3fa602c2..b1dfacf62 100644
--- a/src/components/TrustedByMarquee.tsx
+++ b/src/components/TrustedByMarquee.tsx
@@ -53,6 +53,7 @@ export function TrustedByMarquee({
key={i}
src={logoSrc}
alt={brand}
+ loading="lazy"
className="max-w-24 max-h-14 w-auto h-auto object-contain opacity-50 grayscale hover:opacity-100 transition-all duration-200 dark:invert dark:opacity-70 shrink-0"
/>
) : (
diff --git a/src/routes/admin/banners.$id.tsx b/src/routes/admin/banners.$id.tsx
index 4857f1682..cee381463 100644
--- a/src/routes/admin/banners.$id.tsx
+++ b/src/routes/admin/banners.$id.tsx
@@ -1,11 +1,17 @@
import { createFileRoute, useNavigate } from '@tanstack/react-router'
import { useQuery } from '@tanstack/react-query'
-import { BannerEditor } from '~/components/admin/BannerEditor'
+import { lazy, Suspense } from 'react'
import { getBanner, type BannerWithMeta } from '~/utils/banner.functions'
import { useCapabilities } from '~/hooks/useCapabilities'
import { useCurrentUserQuery } from '~/hooks/useCurrentUser'
import * as v from 'valibot'
+const BannerEditor = lazy(() =>
+ import('~/components/admin/BannerEditor').then((m) => ({
+ default: m.BannerEditor,
+ })),
+)
+
export const Route = createFileRoute('/admin/banners/$id')({
component: BannerEditorPage,
validateSearch: (search) => v.parse(v.object({}), search),
@@ -75,11 +81,19 @@ function BannerEditorPage() {
return (