From 79ff59e373e154bfc9cb96e11d0e85d374ce8143 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 17:44:46 +0000 Subject: [PATCH 1/3] Smooth first-load: preload hero fonts, no post-hydration re-fade, gradient fade-in Co-authored-by: jonas --- app/_home/home.tsx | 9 +++++++++ app/_home/interactions.tsx | 11 ++++++++++- app/_home/new.css | 1 + app/_home/source-gradient.tsx | 10 +++++++++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/_home/home.tsx b/app/_home/home.tsx index c0f9609..0d9ea6b 100644 --- a/app/_home/home.tsx +++ b/app/_home/home.tsx @@ -1,3 +1,4 @@ +import { preload } from 'react-dom'; import { getNewsletterEnabled } from '@/lib/homepage-settings'; import { Pricing } from './pricing'; import { Newsletter } from './newsletter'; @@ -36,7 +37,15 @@ const structuredData = { ], }; +const criticalFonts = [ + '/new/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2', + '/new/03bda585a99c6450-s.p.32sris142tqlb.woff2', +]; + export default async function HomePage() { + for (const href of criticalFonts) { + preload(href, { as: 'font', type: 'font/woff2', crossOrigin: 'anonymous' }); + } const newsletterEnabled = await getNewsletterEnabled(); return ( diff --git a/app/_home/interactions.tsx b/app/_home/interactions.tsx index e788cf2..815a3ed 100644 --- a/app/_home/interactions.tsx +++ b/app/_home/interactions.tsx @@ -72,11 +72,20 @@ export function PageShell({ children }: { children: ReactNode }) { const sections = [ ...root.querySelectorAll('main > section, main > div'), ]; - sections.forEach((el) => el.classList.add('new-reveal')); + // Sections already on screen were painted by the server; animating them + // now would snap them back to a faded state after hydration. + const initiallyVisible = (el: HTMLElement) => { + const box = el.getBoundingClientRect(); + return box.top < window.innerHeight && box.bottom > 0; + }; + sections.forEach((el) => { + if (!initiallyVisible(el)) el.classList.add('new-reveal'); + }); let frame = 0; function reveal() { frame = 0; for (const el of sections) { + if (!el.classList.contains('new-reveal')) continue; const box = el.getBoundingClientRect(); const margin = Math.min(box.height * 0.06, window.innerHeight * 0.2); if (box.top < window.innerHeight - margin && box.bottom > 0) { diff --git a/app/_home/new.css b/app/_home/new.css index be1c9d5..af03486 100644 --- a/app/_home/new.css +++ b/app/_home/new.css @@ -370,6 +370,7 @@ } .meridian-page main > section:first-child { padding-block: 64px; + animation: new-enter 0.65s ease both; } .meridian-page main > section:first-child .flex.w-max > div { animation: new-marquee 40s linear infinite; diff --git a/app/_home/source-gradient.tsx b/app/_home/source-gradient.tsx index d8a8e84..107b524 100644 --- a/app/_home/source-gradient.tsx +++ b/app/_home/source-gradient.tsx @@ -168,7 +168,15 @@ export function SourceGradient({ variant }: { variant: number }) { }} aria-hidden="true" > - + ); } From 1eaa4a7deb2d468cac680a2340ca116ca2eb6e36 Mon Sep 17 00:00:00 2001 From: Jonas Bubela Date: Tue, 27 Oct 2026 13:17:03 -0500 Subject: [PATCH 2/3] fix: advertise the existing site favicon - Point browser icon requests at the shipped SVG instead of a missing fallback --- app/layout.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/layout.tsx b/app/layout.tsx index 860416d..5b534a9 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -25,6 +25,7 @@ const editorial = Lora({ export const metadata: Metadata = { metadataBase: new URL('https://jonasinfocus.com'), + icons: { icon: '/favicon.svg' }, alternates: { canonical: '/' }, openGraph: { title: 'Jonas | Websites, SaaS & web apps', From f8b3e086f7b812df00279ef912237a8390043a95 Mon Sep 17 00:00:00 2001 From: Jonas Bubela Date: Tue, 27 Oct 2026 13:21:53 -0500 Subject: [PATCH 3/3] ci: avoid redundant system package downloads - Use browser libraries already installed on the Ubuntu runner - Keep Chromium installation and all browser regression checks --- .github/workflows/verify.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index d47e9d2..6f622bc 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -23,6 +23,6 @@ jobs: - run: npm test - run: npm run build - run: npm audit - - run: npx playwright install --with-deps chromium + - run: npx playwright install chromium - run: npm run test:public - run: npm run test:session