fix(branding): real @hanzo blocky-H logo+favicon, dev-only devtools, working OIDC button icon
- App.jsx: gate ReactQueryDevtools behind import.meta.env.DEV via lazy dynamic import so the devtools floating button (red flower) never ships in prod. - librechat.yaml + compose.prod.yml: OIDC/model iconURL & OPENID_IMAGE_URL hanzo.ai/logo/icon.svg (404) -> hanzo.chat/assets/logo.svg (served, canonical). - index.html: add scalable SVG favicon (canonical blocky-H) as primary icon. - post-build.cjs: copy favicon.ico into dist root so /favicon.ico serves. - add real multi-size favicon.ico generated from @hanzo/brand favicon (blocky-H). logo.svg/favicons already match @hanzo/brand canonical blocky-H byte-for-byte; prod was serving a stale dist (title 'Chat', no assets) -> fresh build fixes.
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="description" content="Hanzo Chat - AI chat platform with support for multiple AI models" />
|
||||
<title>Hanzo Chat</title>
|
||||
<link rel="icon" type="image/svg+xml" href="assets/logo.svg" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicon-16x16.png" />
|
||||
<link rel="apple-touch-icon" href="assets/apple-touch-icon-180x180.png" />
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
@@ -4,7 +4,8 @@ async function postBuild() {
|
||||
try {
|
||||
await fs.copy('public/assets', 'dist/assets');
|
||||
await fs.copy('public/robots.txt', 'dist/robots.txt');
|
||||
console.log('✅ PWA icons and robots.txt copied successfully. Glob pattern warnings resolved.');
|
||||
await fs.copy('public/favicon.ico', 'dist/favicon.ico');
|
||||
console.log('✅ PWA icons, favicon.ico, and robots.txt copied successfully. Glob pattern warnings resolved.');
|
||||
} catch (err) {
|
||||
console.error('❌ Error copying files:', err);
|
||||
process.exit(1);
|
||||
|
||||
+13
-3
@@ -1,10 +1,9 @@
|
||||
import { useEffect } from 'react';
|
||||
import { lazy, Suspense, useEffect } from 'react';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
import { DndProvider } from 'react-dnd';
|
||||
import { RouterProvider } from 'react-router-dom';
|
||||
import * as RadixToast from '@radix-ui/react-toast';
|
||||
import { HTML5Backend } from 'react-dnd-html5-backend';
|
||||
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
|
||||
import { Toast, ThemeProvider, ToastProvider } from '@librechat/client';
|
||||
import { QueryClient, QueryClientProvider, QueryCache } from '@tanstack/react-query';
|
||||
import { ScreenshotProvider, useApiErrorBoundary } from './hooks';
|
||||
@@ -14,6 +13,13 @@ import { initializeFontSize } from '~/store/fontSize';
|
||||
import { LiveAnnouncer } from '~/a11y';
|
||||
import { router } from './routes';
|
||||
|
||||
// Dev-only: lazily loaded so the devtools bundle never ships in production builds.
|
||||
const ReactQueryDevtools = import.meta.env.DEV
|
||||
? lazy(() =>
|
||||
import('@tanstack/react-query-devtools').then((m) => ({ default: m.ReactQueryDevtools })),
|
||||
)
|
||||
: null;
|
||||
|
||||
const App = () => {
|
||||
const { setError } = useApiErrorBoundary();
|
||||
|
||||
@@ -63,7 +69,11 @@ const App = () => {
|
||||
<DndProvider backend={HTML5Backend}>
|
||||
<RouterProvider router={router} />
|
||||
<WakeLockManager />
|
||||
<ReactQueryDevtools initialIsOpen={false} position="top-right" />
|
||||
{import.meta.env.DEV && ReactQueryDevtools && (
|
||||
<Suspense fallback={null}>
|
||||
<ReactQueryDevtools initialIsOpen={false} position="top-right" />
|
||||
</Suspense>
|
||||
)}
|
||||
<Toast />
|
||||
<RadixToast.Viewport className="pointer-events-none fixed inset-0 z-[1000] mx-auto my-2 flex max-w-[560px] flex-col items-stretch justify-start md:pb-5" />
|
||||
</DndProvider>
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ services:
|
||||
OPENID_SCOPE: openid profile email
|
||||
OPENID_CALLBACK_URL: /oauth/openid/callback
|
||||
OPENID_BUTTON_LABEL: Log in with Hanzo
|
||||
OPENID_IMAGE_URL: https://hanzo.ai/logo/icon.svg
|
||||
OPENID_IMAGE_URL: https://hanzo.chat/assets/logo.svg
|
||||
OPENID_USERNAME_CLAIM: name
|
||||
OPENID_NAME_CLAIM: name
|
||||
OPENID_USE_PKCE: "true"
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ endpoints:
|
||||
# Authenticated users override with their own key via IAM (hanzo.id).
|
||||
apiKey: '${HANZO_API_KEY}'
|
||||
baseURL: 'https://api.hanzo.ai/v1'
|
||||
iconURL: 'https://hanzo.ai/logo/icon.svg'
|
||||
iconURL: 'https://hanzo.chat/assets/logo.svg'
|
||||
models:
|
||||
default:
|
||||
# Zen model family (Hanzo AI)
|
||||
|
||||
Reference in New Issue
Block a user