Skip to content

Artwork

Source artwork masters live in ui/design/ untracked (/ui/design/*.png is ignored): they are large, they change rarely, and every consumer in the repo is a small derived asset committed alongside the code that references it.

shuttle icon

ui/design/shuttle-icon-1024.png — 1024×1024 master, 1.9MB. It was tracked at ui/public/shuttle-icon.png until the favicon set was cut from it; recover it from history with:

mkdir -p ui/design
git cat-file blob 71b61fad8e13d9db7edf3daaf03b18fe4355dfc2 > ui/design/shuttle-icon-1024.png

Derived, tracked, and served:

asset size where
ui/public/favicon.ico 32×32 + 16×16 <link rel="icon"> in ui/index.html
ui/public/apple-touch-icon.png 180×180 <link rel="apple-touch-icon">

Regenerate both with ImageMagick:

magick ui/design/shuttle-icon-1024.png -strip -define icon:auto-resize=32,16 \
  ui/public/favicon.ico
magick ui/design/shuttle-icon-1024.png -resize 180x180 -strip -colors 128 \
  PNG8:ui/public/apple-touch-icon.png

Anything added to ui/public/ is copied wholesale into every vite bundle, and daemon/lib/shuttle_web/endpoint.ex's Plug.Static only: list decides what the daemon actually serves — a file in public/ that is not on that list 404s in production.