Skip to content

feat(branding): use the generated deckd mark across every icon surface - #170

Merged
jonocodes merged 1 commit into
mainfrom
feat/brand-icons-menubar
Sep 24, 2026
Merged

jonocodes merged 1 commit into
mainfrom
feat/brand-icons-menubar

Conversation

@jonocodes

Copy link
Copy Markdown
Owner

What

Adopts the generated 2x2 deckd mark as the single source of truth for every icon surface. The raw assets carried a stray generator suffix (_SiNR), so they are renamed to plain deckd-logo / deckd-mark names.

  • Favicon + PWA icon — client/public/icon.svg (favicon + any manifest icon), plus rasterised icon-192/512.png (any) and icon-maskable-192/512.png (maskable).
  • apple-touch-icon — 180px, opaque full-bleed so iOS's own mask doesn't crop it.
  • macOS .app icon — committed packaging/macos/deckd.icns (16→1024), now the spec default (DECKD_ICON still overrides).
  • Menu-bar status item — a monochrome template image (deckd-menubar.png + @2x), so macOS tints it for light/dark. Falls back to SF Symbol square.grid.2x2, then the deckd text title.
  • just icons — regenerates every PNG/icns above from the SVG using the e2e Chromium + iconutil (no new dependencies).

Notes

  • The maskable art is a separate full-bleed SVG: the any mark's rounded-rect background and corner tiles would be clipped by a mask, so the maskable variant pulls the tiles into the safe circle.
  • The menu-bar fallback chain exists because the bundle may be run from a bare source checkout; menubar_icon_paths resolves both frozen (sys._MEIPASS) and source (packaging/macos) layouts.
  • The packaged app is LSUIElement (menu-bar only), so the .icns shows in Finder/Get Info/notifications — there is no Dock icon.

Test plan

  • pytest tests/test_app.py — 9 passed (incl. 3 new menubar_icon_paths cases)
  • python -m py_compile on menubar.py / macos_app.py; spec parses
  • npm run lint and npm run build in client/
  • just icons end-to-end (PNGs + .icns)
  • Visual check of the menu-bar mark in deckd.app on a retina Mac (not doable in CI)

Install the generated 2x2 mark as the single source of truth for icons.
The raw assets had a stray generator suffix (`_SiNR`); renamed to plain
`deckd-logo`/`deckd-mark` names and copied the 2x2 art to
client/public/icon.svg.

- favicon + PWA icon (SVG, plus 192/512 PNG any + maskable)
- apple-touch-icon (opaque, full-bleed so iOS's mask doesn't crop)
- macOS .app icon: committed deckd.icns, defaulted in the PyInstaller spec
- menu-bar status item: monochrome template image (3 dim + 1 active tile),
  with an SF Symbol and text-title fallback

Adds `just icons` to regenerate everything from the SVG via the e2e
Chromium and iconutil.
@jonocodes
jonocodes merged commit 30fd015 into main Sep 24, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant