diff --git a/apps/server/src/projectFaviconRoute.test.ts b/apps/server/src/projectFaviconRoute.test.ts
index a346e513eb..03d9893fff 100644
--- a/apps/server/src/projectFaviconRoute.test.ts
+++ b/apps/server/src/projectFaviconRoute.test.ts
@@ -117,6 +117,25 @@ describe("tryHandleProjectFaviconRequest", () => {
});
});
+ it("serves jpeg icons discovered from source metadata with the correct content type", async () => {
+ const projectDir = makeTempDir("t3code-favicon-route-jpeg-");
+ const iconPath = path.join(projectDir, "public", "brand", "logo.jpeg");
+ fs.mkdirSync(path.dirname(iconPath), { recursive: true });
+ fs.writeFileSync(
+ path.join(projectDir, "index.html"),
+ '',
+ );
+ fs.writeFileSync(iconPath, "jpeg-favicon", "utf8");
+
+ await withRouteServer(async (baseUrl) => {
+ const pathname = `/api/project-favicon?cwd=${encodeURIComponent(projectDir)}`;
+ const response = await request(baseUrl, pathname);
+ expect(response.statusCode).toBe(200);
+ expect(response.contentType).toContain("image/jpeg");
+ expect(response.body).toBe("jpeg-favicon");
+ });
+ });
+
it("resolves icon link when href appears before rel in HTML", async () => {
const projectDir = makeTempDir("t3code-favicon-route-html-order-");
const iconPath = path.join(projectDir, "public", "brand", "logo.svg");
diff --git a/apps/server/src/projectFaviconRoute.ts b/apps/server/src/projectFaviconRoute.ts
index cf234ad894..895693e962 100644
--- a/apps/server/src/projectFaviconRoute.ts
+++ b/apps/server/src/projectFaviconRoute.ts
@@ -5,6 +5,7 @@ import path from "node:path";
const FAVICON_MIME_TYPES: Record = {
".png": "image/png",
".jpg": "image/jpeg",
+ ".jpeg": "image/jpeg",
".svg": "image/svg+xml",
".ico": "image/x-icon",
};