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.