diff --git a/package-lock.json b/package-lock.json
index 102b534819..8a71d40f8c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6330,10 +6330,10 @@
"integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
"license": "MIT"
},
- "node_modules/@fontsource-variable/inter": {
+ "node_modules/@fontsource-variable/geist": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.3.0.tgz",
- "integrity": "sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.3.0.tgz",
+ "integrity": "sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
@@ -40144,7 +40144,7 @@
"dependencies": {
"@cloudflare/vite-plugin": "^1.29.1",
"@cloudflare/workers-types": "^4.20260317.1",
- "@fontsource-variable/inter": "^5.3.0",
+ "@fontsource-variable/geist": "^5.3.0",
"@tanstack/react-router": "^1.170.16",
"@tanstack/react-start": "^1.168.26",
"framer-motion": "^12.35.2",
diff --git a/packages/website/package.json b/packages/website/package.json
index 63924d5a7a..5f64191da9 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -14,7 +14,7 @@
"dependencies": {
"@cloudflare/vite-plugin": "^1.29.1",
"@cloudflare/workers-types": "^4.20260317.1",
- "@fontsource-variable/inter": "^5.3.0",
+ "@fontsource-variable/geist": "^5.3.0",
"@tanstack/react-router": "^1.170.16",
"@tanstack/react-start": "^1.168.26",
"framer-motion": "^12.35.2",
diff --git a/packages/website/src/components/faq-item.tsx b/packages/website/src/components/faq-item.tsx
index 217e4d1281..7813f9ddbf 100644
--- a/packages/website/src/components/faq-item.tsx
+++ b/packages/website/src/components/faq-item.tsx
@@ -3,12 +3,14 @@ import type { ReactNode } from "react";
export function FAQItem({ question, children }: { question: string; children: ReactNode }) {
return (
-
- +
- −
+
+ +
+
+ −
+
{question}
- {children}
+ {children}
);
}
diff --git a/packages/website/src/server-entry.ts b/packages/website/src/server-entry.ts
index 9fb921833a..657abf9cfe 100644
--- a/packages/website/src/server-entry.ts
+++ b/packages/website/src/server-entry.ts
@@ -1,4 +1,5 @@
-import startEntry from "@tanstack/react-start/server-entry";
+import type { Register } from "@tanstack/react-router";
+import type { RequestHandler } from "@tanstack/react-start/server";
import { getAndroidVersionCode } from "~/android-version";
import { getCanonicalRedirect } from "~/canonical-url";
import { getDoc, getLegacyDocsRedirect } from "~/docs";
@@ -59,6 +60,21 @@ function variesByUserAgent(pathname: string, response: Response): boolean {
return response.headers.get("content-type")?.includes("text/html") ?? false;
}
+// A static import of TanStack Start's server handler breaks every SSR hot reload on
+// Vite 7 with "createStartHandler is not a function". Importing it at request time
+// avoids the race. Remove once the website is on a Vite release with vitejs/vite#22369.
+// https://github.com/TanStack/router/issues/7285
+let cachedStartFetch: RequestHandler | null = null;
+
+async function getStartFetch(): Promise> {
+ if (!cachedStartFetch) {
+ const { createStartHandler, defaultStreamHandler } =
+ await import("@tanstack/react-start/server");
+ cachedStartFetch = createStartHandler(defaultStreamHandler);
+ }
+ return cachedStartFetch;
+}
+
export default {
async fetch(request: Request, env: WebsiteEnv, context: ExecutionContext): Promise {
const url = new URL(request.url);
@@ -105,7 +121,8 @@ export default {
return markdownResponse(doc.content);
}
- const response = await startEntry.fetch(request);
+ const startFetch = await getStartFetch();
+ const response = await startFetch(request);
return variesByUserAgent(url.pathname, response) ? withoutSharedCaching(response) : response;
},
};
diff --git a/packages/website/src/styles.css b/packages/website/src/styles.css
index eea7d2a84b..bfbe26a82a 100644
--- a/packages/website/src/styles.css
+++ b/packages/website/src/styles.css
@@ -1,5 +1,5 @@
@import "tailwindcss";
-@import "@fontsource-variable/inter";
+@import "@fontsource-variable/geist";
* {
scrollbar-color: var(--color-scrollbar-handle) transparent;
@@ -661,7 +661,7 @@
}
@theme {
- --font-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif;
+ --font-sans: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
--color-background: #101615;
--color-foreground: #fafafa;