Skip to content

Brand assets

The files live in docs/assets/brand/. They are committed artefacts, not generated during a build, so a link to this page is enough for anyone who needs the logo.

What to use where

Surface File Why that one
Google OAuth consent screen threadory-mark-120.png Google asks for a square image; 120×120 is the size it displays
LinkedIn page, and anything else asking for 300×300 threadory-mark-300.png Exact size; uploading a larger file and letting the site resize softens the knots
PWA / Android home screen, and other 192×192 slots threadory-mark-192.png The size those manifests ask for
GitLab / GitHub / Slack app avatar threadory-mark-512.png Square, safe against dark and light chrome; Slack's minimum
App store or directory listing threadory-mark-1024.png Largest square; downscales cleanly
Slides, partner pages, e-mail signature threadory-lockup-light.png Mark plus wordmark on white
The same on a dark background threadory-lockup-dark.png Same lockup, white wordmark
Anywhere a vector is accepted threadory-mark.svg Scales without loss; identical geometry

The mark is white on an accent plate on purpose. It carries its own background, so it stays legible on a tab strip, a grey consent screen or a dark app directory, none of which we control.

The browser favicon is not here — it ships inside the app as apps/web/src/app/icon.svg with its rasters beside it, because Next only emits the <link rel="icon"> tags for files that follow its naming convention in app/.

Rules

  • Do not recolour the plate or the mark. The accent is #3a4ef0.
  • Do not put the transparent mark on a coloured background; use the plate.
  • Do not stretch, rotate, add a shadow, or re-space the lockup — export a larger PNG instead of scaling one up.
  • The wordmark is Geist SemiBold. Do not set it in another typeface; use the lockup file.

Regenerating

The shape lives in apps/web/src/app/icon.svg. After changing it, from apps/web:

# favicon.ico + apple-icon.png, next to the SVG
python3 scripts/render-brand-icons.py src/app

# the press-kit squares
python3 scripts/render-brand-icons.py ../../docs/assets/brand 120 192 256 300 512 1024

# the lockups (needs node_modules for Geist and next/og)
node scripts/render-brand-lockup.mjs ../../docs/assets/brand

Commit the output. Neither script runs in CI: these files change about as often as the product is renamed.

Need a size that is not here? Pass it as an argument — python3 scripts/render-brand-icons.py ../../docs/assets/brand 144 writes threadory-mark-144.png. Export the exact size the surface asks for rather than uploading a larger file: the knots in the mark are small, and a site's own downscaler blurs them where ours does not.