Skip to content

Commit b2fd54c

Browse files
authored
Add New Logos (#2785)
1 parent 59ca5f8 commit b2fd54c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+902
-224
lines changed

app/api/og/route.tsx

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,22 @@ import { NextRequest } from "next/server";
33

44
export const runtime = "edge";
55

6+
/** White wordmark PNG (2233×527); kept in sync from `public/langfuse-wordart-white.svg` via `scripts/sync-wordmark-png-for-og.mjs` (prebuild). */
7+
const WORDMARK_PATH =
8+
"/brand-assets/wordmark/Langfuse/dark/langfuse-wordart-white.png";
9+
const WORDMARK_ASPECT = 2233 / 527;
10+
11+
function wordmarkSize(heightPx: number) {
12+
return {
13+
height: heightPx,
14+
width: Math.round(heightPx * WORDMARK_ASPECT),
15+
};
16+
}
17+
618
export async function GET(request: NextRequest) {
719
const base = new URL("/", request.url).toString();
8-
const imageData = (await fetch(
9-
new URL("/icon256.png", base)
20+
const wordmarkData = (await fetch(
21+
new URL(WORDMARK_PATH, base)
1022
).then((res) => res.arrayBuffer())) as string;
1123
const fontGeistMono = await fetch(
1224
new URL("/fonts/GeistMono-Medium.ttf", base)
@@ -28,6 +40,8 @@ export async function GET(request: NextRequest) {
2840

2941
const section = searchParams.get("section") ?? undefined;
3042

43+
const headerWordmark = wordmarkSize(50);
44+
3145
return new ImageResponse(
3246
(
3347
<div
@@ -44,27 +58,22 @@ export async function GET(request: NextRequest) {
4458
fontSize: 40,
4559
}}
4660
>
47-
{title !== "Langfuse" ? (
48-
<div
49-
style={{
50-
display: "flex",
51-
gap: 20,
52-
alignItems: "center",
53-
padding: 40,
54-
paddingLeft: 80,
55-
paddingRight: 80,
56-
borderBottom: "3px solid #aaa",
57-
}}
58-
>
59-
<img width="50" height="50" src={imageData} />
60-
<span style={{ fontWeight: 800 }}>
61-
Langfuse
62-
<span style={{ marginLeft: 10, fontWeight: 400 }}>
63-
– Open Source LLM Engineering Platform
64-
</span>
65-
</span>
66-
</div>
67-
) : null}
61+
<div
62+
style={{
63+
display: "flex",
64+
gap: 24,
65+
alignItems: "center",
66+
padding: 40,
67+
paddingLeft: 80,
68+
paddingRight: 80,
69+
borderBottom: "3px solid #aaa",
70+
}}
71+
>
72+
<img {...headerWordmark} src={wordmarkData} />
73+
<span style={{ fontWeight: 400, fontSize: 28, color: "#ccc" }}>
74+
Open Source LLM Engineering Platform
75+
</span>
76+
</div>
6877
<div
6978
style={{
7079
display: "flex",

app/cloud/[[...path]]/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ export default function CloudRegionSelectorPage() {
134134
<div className="text-center sm:mx-auto sm:w-full">
135135
<a href="/" aria-label="Langfuse Home" className="inline-flex">
136136
<Image
137-
src="/langfuse_logo.svg"
137+
src="/langfuse-wordart.svg"
138138
alt="Langfuse"
139139
width={152}
140140
height={20}
141141
priority
142142
className="h-auto w-36 dark:hidden"
143143
/>
144144
<Image
145-
src="/langfuse_logo_white.svg"
145+
src="/langfuse-wordart-white.svg"
146146
alt="Langfuse"
147147
width={152}
148148
height={20}

app/layout.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,39 @@ import Script from "next/script";
33
import { RootProvider } from "fumadocs-ui/provider/next";
44
import { GeistSans } from "geist/font/sans";
55
import { GeistMono } from "geist/font/mono";
6+
import { DevAriaHiddenConsoleFilter } from "@/components/DevAriaHiddenConsoleFilter";
7+
import {
8+
buildDefaultSiteOgImageUrl,
9+
SITE_DEFAULT_OG_DESCRIPTION,
10+
} from "@/lib/og-url";
611
import { PostHogProvider } from "@/components/analytics/PostHogProvider";
712
import { Hubspot } from "@/components/analytics/hubspot";
813
import "../style.css";
914
import "@vidstack/react/player/styles/base.css";
1015
import "../src/overrides.css";
1116

17+
const defaultOgImageUrl = buildDefaultSiteOgImageUrl();
18+
1219
export const metadata: Metadata = {
1320
metadataBase: new URL("https://langfuse.com"),
1421
title: { default: "Langfuse", template: "%s - Langfuse" },
15-
description:
16-
"Traces, evals, prompt management and metrics to debug and improve your LLM application.",
22+
description: SITE_DEFAULT_OG_DESCRIPTION,
23+
icons: {
24+
icon: [
25+
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
26+
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
27+
{ url: "/favicon.ico", sizes: "any" },
28+
],
29+
apple: [{ url: "/apple-touch-icon.png", sizes: "180x180" }],
30+
shortcut: ["/favicon.ico"],
31+
},
1732
openGraph: {
18-
images: [{ url: "https://langfuse.com/og.png" }],
33+
images: [{ url: defaultOgImageUrl }],
1934
},
2035
twitter: {
2136
card: "summary_large_image",
2237
site: "langfuse.com",
23-
images: [{ url: "https://langfuse.com/og.png" }],
38+
images: [{ url: defaultOgImageUrl }],
2439
},
2540
};
2641

@@ -35,6 +50,7 @@ export default function RootLayout({
3550
className={`${GeistSans.variable} ${GeistMono.variable}`}
3651
>
3752
<body className="font-sans antialiased">
53+
{process.env.NODE_ENV === "development" && <DevAriaHiddenConsoleFilter />}
3854
<PostHogProvider>
3955
<RootProvider>{children}</RootProvider>
4056
</PostHogProvider>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"use client";
2+
3+
import { useEffect } from "react";
4+
5+
/**
6+
* The `aria-hidden` package (used by Radix / focus layers) calls `console.error`
7+
* when a node to "keep visible" is not under `document.body` — e.g. nested
8+
* modals with portals (Fumadocs sidebar + Inkeep). It then does nothing harmful
9+
* ("Doing nothing"), but Next.js dev treats `console.error` as a full-screen overlay.
10+
*
11+
* Downgrade only that known message to `console.debug` in development.
12+
*/
13+
export function DevAriaHiddenConsoleFilter() {
14+
useEffect(() => {
15+
if (process.env.NODE_ENV !== "development") return;
16+
17+
const orig = console.error.bind(console) as (...args: unknown[]) => void;
18+
console.error = (...args: unknown[]) => {
19+
const [a0, , a2] = args;
20+
if (
21+
a0 === "aria-hidden" &&
22+
typeof a2 === "string" &&
23+
a2.includes("not contained inside")
24+
) {
25+
console.debug(...args);
26+
return;
27+
}
28+
orig(...args);
29+
};
30+
31+
return () => {
32+
console.error = orig;
33+
};
34+
}, []);
35+
36+
return null;
37+
}

components/LogoContextMenu.tsx

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,48 +36,22 @@ const LogoContextMenu: React.FC<{
3636
<DropdownMenuTrigger />
3737
<DropdownMenuPortal>
3838
<DropdownMenuContent>
39-
<DropdownMenuItem onClick={(e) => handleAction(e, "/", false)}>
40-
<ExternalLink size={14} className="mr-2" />
41-
Open in new tab
42-
</DropdownMenuItem>
43-
<DropdownMenuSeparator />
44-
<DropdownMenuItem
45-
onClick={(e) => handleAction(e, "/langfuse_logo.png", true)}
46-
>
47-
<Download size={14} className="mr-2" />
48-
Logo (png)
49-
</DropdownMenuItem>
50-
<DropdownMenuItem
51-
onClick={(e) => handleAction(e, "/langfuse_logo.svg", true)}
52-
>
53-
<Download size={14} className="mr-2" />
54-
Logo (svg)
55-
</DropdownMenuItem>
56-
<DropdownMenuSeparator />
5739
<DropdownMenuItem
58-
onClick={(e) => handleAction(e, "/langfuse_logo_white.png", true)}
40+
onClick={(e) => handleAction(e, "/langfuse-icon.svg", true)}
5941
>
6042
<Download size={14} className="mr-2" />
61-
Logo white (png)
43+
Langfuse Icon
6244
</DropdownMenuItem>
6345
<DropdownMenuItem
64-
onClick={(e) => handleAction(e, "/langfuse_logo_white.svg", true)}
46+
onClick={(e) => handleAction(e, "/langfuse-wordart.svg", true)}
6547
>
6648
<Download size={14} className="mr-2" />
67-
Logo white (svg)
49+
Langfuse Wordmark
6850
</DropdownMenuItem>
6951
<DropdownMenuSeparator />
70-
<DropdownMenuItem
71-
onClick={(e) => handleAction(e, "/langfuse_icon.png", true)}
72-
>
73-
<Download size={14} className="mr-2" />
74-
Icon (png)
75-
</DropdownMenuItem>
76-
<DropdownMenuItem
77-
onClick={(e) => handleAction(e, "/langfuse_icon.svg", true)}
78-
>
79-
<Download size={14} className="mr-2" />
80-
Icon (svg)
52+
<DropdownMenuItem onClick={(e) => handleAction(e, "/brand", false)}>
53+
<ExternalLink size={14} className="mr-2" />
54+
Brand Assets & Guide
8155
</DropdownMenuItem>
8256
</DropdownMenuContent>
8357
</DropdownMenuPortal>

components/MainContentWrapper.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const pathsWithoutFooterWidgets = [
3939
"/users",
4040
"/support",
4141
"/about",
42+
"/brand",
4243
"/careers",
4344
"/press",
4445
"/watch-demo",

components/home/Integrations.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ArrowUpRightFromSquare, Code, MoreHorizontal } from "lucide-react";
77
import { HomeSection } from "./components/HomeSection";
88
import { Header } from "../Header";
99
import LlamaindexIcon from "./img/llamaindex_icon.png";
10-
import LangfuseIcon from "@/public/icon.svg";
10+
import LangfuseIcon from "@/public/langfuse-icon.svg";
1111
import LangchainIcon from "./img/langchain_icon.png";
1212
import HaystackIcon from "./img/haystack_icon.png";
1313
import LitellmIcon from "./img/litellm_icon.png";

components/home/Releases.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const Releases = ({
6060
release={release}
6161
icon={
6262
<span>
63-
<img src="/icon.svg" alt="langfuse" className="h-5 w-5" />
63+
<img src="/langfuse-icon.svg" alt="langfuse" className="h-5 w-5" />
6464
</span>
6565
}
6666
/>

components/inkeep/InkeepChatButton.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export default function InkeepChatButton() {
2020
aiChatSettings,
2121
searchSettings,
2222
modalSettings,
23+
label: "Ask AI",
24+
avatar: "/langfuse-icon.svg",
2325
};
2426

2527
return (

components/inkeep/InkeepSearchBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default function InkeepSearchBar() {
4646
};
4747

4848
return (
49-
<div className="overflow-hidden h-9">
49+
<div className="h-9">
5050
<SearchBar {...searchBarProps} />
5151
</div>
5252
);

0 commit comments

Comments
 (0)