fix(manager): real logo PNG + Mac fallback is now a .dmg

- assets/logo.tsx: drop the hand-drawn "H" path SVG and render
  /logo.png (already swapped to the new gradient icon when we
  refreshed branding). One source asset across desktop + favicon +
  Manager web.
- desktop_download.go: Mac fallback URL points at HeiCode_0.1.9_
  aarch64.dmg now (drag-to-Applications installer), not the
  .app.tar.gz updater payload that confuses end users.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-14 17:13:52 +08:00
co-authored by Claude Opus 4.7
parent ac1aa87312
commit 3e7ed0202d
2 changed files with 23 additions and 28 deletions
+5 -2
View File
@@ -132,9 +132,12 @@ func filenameFromURL(rawURL string) string {
// stranded.
//
// Update these constants whenever a NEW Mac binary is uploaded to blob.
// Mac downloads on the /desktop-client page point at the .dmg installer
// (drag-to-Applications UX), NOT the .app.tar.gz which is the Tauri
// auto-updater payload. Bump these when a new Mac DMG ships to blob.
const (
fallbackMacArmVersion = "0.1.5"
fallbackMacArmURL = "https://heicodeblob.blob.core.windows.net/msi/desktop/0.1.5/HeiCode.app.tar.gz"
fallbackMacArmVersion = "0.1.9"
fallbackMacArmURL = "https://heicodeblob.blob.core.windows.net/msi/desktop/0.1.9/HeiCode_0.1.9_aarch64.dmg"
)
// GetDesktopDownloads returns the latest released desktop client metadata
+18 -26
View File
@@ -1,33 +1,25 @@
import { type SVGProps } from 'react'
import { cn } from '@/lib/utils'
export function Logo({ className, ...props }: SVGProps<SVGSVGElement>) {
// Heicode Manager brand mark.
//
// Renders the canonical app icon from `public/logo.png` instead of an
// inline SVG. Easier to keep in sync with the desktop client + favicon
// (one source asset, swapped via `tauri icon` / Pillow when branding
// updates). All existing callers continue to use `<Logo className="..." />`.
type LogoProps = React.ImgHTMLAttributes<HTMLImageElement>
export function Logo({ className, alt, ...props }: LogoProps) {
return (
<svg
<img
id='heicode-manager-logo'
viewBox='0 0 256 256'
xmlns='http://www.w3.org/2000/svg'
height='24'
width='24'
fill='none'
className={cn('size-6', className)}
src='/logo.png'
alt={alt ?? 'Heicode Manager'}
width={24}
height={24}
className={cn('size-6 select-none', className)}
draggable={false}
{...props}
>
<title>Heicode Manager</title>
<defs>
<linearGradient id='heicode-logo-bg' x1='0' y1='0' x2='256' y2='256' gradientUnits='userSpaceOnUse'>
<stop offset='0' stopColor='#B888E5' />
<stop offset='0.55' stopColor='#7B6BE3' />
<stop offset='1' stopColor='#6B7CE0' />
</linearGradient>
<linearGradient id='heicode-logo-glass' x1='0' y1='0' x2='0' y2='256' gradientUnits='userSpaceOnUse'>
<stop offset='0' stopColor='#FFFFFF' stopOpacity='0.32' />
<stop offset='0.6' stopColor='#FFFFFF' stopOpacity='0' />
</linearGradient>
</defs>
<rect x='8' y='8' width='240' height='240' rx='56' fill='url(#heicode-logo-bg)' />
<rect x='8' y='8' width='240' height='240' rx='56' fill='url(#heicode-logo-glass)' />
<path d='M74 64h28v54h52V64h28v128h-28v-54h-52v54H74z' fill='#FFFFFF' />
</svg>
/>
)
}