Skip to content

Commit d37e612

Browse files
Add favicon: orange broadcast icon matching the app navbar logo
Created frontend/public/favicon.svg using the same IconBroadcast paths from @tabler/icons-react (v3.44.0) that are used in the AppLayout navbar. The icon is rendered as white strokes on an orange rounded-square background (#fd7e14, Mantine orange.5) so it's clearly legible at the 16px favicon size that stroke-only SVGs collapse to. The SPA catch-all route in backend/main.py (/{full_path:path}) was swallowing GET /favicon.svg and returning index.html with Content-Type text/html — browsers silently ignored the response since it wasn't a valid image. Fixed by registering an explicit /favicon.svg GET route before the fallback that reads and returns the file with the correct image/svg+xml content type. The index.html <link rel="icon"> was already pointing at /favicon.svg from the Vite project template; no HTML changes were needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c1279b7 commit d37e612

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

backend/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ async def auth_middleware(request: Request, call_next):
8686
if STATIC_DIR.exists():
8787
app.mount("/assets", StaticFiles(directory=str(STATIC_DIR / "assets")), name="assets")
8888

89+
@app.get("/favicon.svg", include_in_schema=False)
90+
async def favicon():
91+
return Response(content=(STATIC_DIR / "favicon.svg").read_bytes(), media_type="image/svg+xml")
92+
8993
@app.get("/{full_path:path}", include_in_schema=False)
9094
async def spa_fallback(full_path: str):
9195
return HTMLResponse(content=(STATIC_DIR / "index.html").read_text())

frontend/public/favicon.svg

Lines changed: 8 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)