Skip to content
nikcli
Docs
Documentation

Brand assets

The nikcli wordmark variants, how they're themed across surfaces, and where the assets live in each package.

Overview

nikcli ships three pixel wordmark variants, all derived from a single master (packages/mobile/assets/wordmark.png). The web package, the mobile app, and the Studio / dashboard reuse the same files so the brand stays consistent across surfaces.

dark backgrounds

Light letters

wordmark-dark.png — pale grey letters, transparent background. Use on dark or photographic surfaces.

light backgrounds

Dark letters

wordmark-light.png — ink grey letters, transparent background. Use on light surfaces.

default

Master file

wordmark.png — original source asset, identical to wordmark-dark.png. Kept for archival and export pipelines.

Single source of truth

All variants live in packages/mobile/assets/. The web package copies them into public/brand/ at build time so the docs site can serve them statically without depending on the mobile package at build.

Download the brand kit

One zip, every PNG the docs and apps serve, plus a README.md and a MANIFEST.csv with byte sizes. Filenames and content match packages/mobile/assets/; the un-suffixed names (icon.png, wordmark.png, splash.png) are the masters used by desktop shells and store pipelines, and they are duplicated as the dark variant so theme-aware callers can pin a stable name.

What’s inside the zip 6 groups · 15 files

Wordmarks

  • wordmark-dark.png 632×206 Pale grey letters for dark / photographic backgrounds.
  • wordmark-light.png 632×206 Ink grey letters for light / paper backgrounds.
  • wordmark.png 632×206 Identical to wordmark-dark.png. Kept for archival and export pipelines.

App icons

  • icon.png 1024×1024 Dark-surface adaptive base. Identical content to icon-dark.png.
  • icon-dark.png 1024×1024 Explicit dark-mode pairing (same raster as icon.png).
  • icon-light.png 1024×1024 Light-surface icon for paper-like backgrounds.

Adaptive icons

  • adaptive-icon.png 1024×1024 Dark surface adaptive layer. Identical to icon.png.
  • adaptive-icon-light.png 1024×1024 Light-surface adaptive layer. Identical to icon-light.png.

Icon marks

  • app-icon-mark.png 128×128 Dark surface monogram for tab bars, sidebar, dock.
  • app-icon-mark-light.png 128×128 Light-surface monogram for paper-like chrome.

Favicons

  • favicon.png 48×48 Dark surface favicon for <link rel="icon">.
  • favicon-light.png 48×48 Light-surface favicon for paper-like browser chrome.

Splash screens

  • splash.png 1024×1024 Dark surface launch screen. Identical to splash-dark.png.
  • splash-dark.png 1024×1024 Explicit dark-mode launch screen.
  • splash-light.png 1024×1024 Light surface launch screen for paper-like backgrounds.

Or download individual files

Same rasterizations, one PNG at a time. Useful when you only need the wordmark, the favicon, or a specific dark / light pairing.

Rebuild the kit

The zip is generated from packages/mobile/assets/ by packages/web/script/build-brandkit.ts. After updating a source PNG, re-run it so the served archive stays in sync:

Terminal
bash
bun run --cwd packages/web build:brandkit

Wordmark variants

FileLetter colorBackgroundUse when
wordmark-dark.pngPale grey, ~70% luminanceTransparentDark theme, photographic backgrounds, terminal chrome on macOS.
wordmark-light.pngInk grey, ~30% luminanceTransparentLight theme, paper-like backgrounds, print material.
wordmark.pngPale grey, ~70% luminanceTransparentMaster / archival — same content as wordmark-dark.png.

All three PNGs share the same dimensions: 632 × 206 pixels at native scale, RGBA, non-interlaced. The intrinsic aspect ratio (≈ 3.07:1) lets us compute width from a chosen height with width = height × (632 / 206).

Theme switching

Every consumer switches the wordmark variant using the same pattern: render one image for the light theme, one for the dark theme, and toggle visibility through CSS.

Web (Tailwind / Astro)

Tailwind's dark mode is configured with the [data-theme="dark"] selector in tailwind.config.mjs. Two images are emitted, only one is visible at a time:

html
<img src="/brand/wordmark-light.png" class="h-8 w-auto dark:hidden" />
<img src="/brand/wordmark-dark.png"  class="h-8 w-auto hidden dark:block" />

The navbar, footer, and the dashboard connect screen all use this pattern.

Mobile (React Native)

components/layout/BrandMark.tsx consumes the same files through useAppTheme() and chooses the variant at render time:

tsx
import { Image } from "react-native"
import { useAppTheme } from "@/lib/theme"

const WORDMARK_DARK = require("@/assets/wordmark-dark.png")
const WORDMARK_LIGHT = require("@/assets/wordmark-light.png")

export function BrandMark({ height = 18 }: { height?: number }) {
  const { isDark } = useAppTheme()
  const width = Math.round(height * (632 / 206))
  return (
    <Image
      source={isDark ? WORDMARK_DARK : WORDMARK_LIGHT}
      style={{ width, height }}
      resizeMode="contain"
      accessibilityLabel="NIKCLI"
    />
  )
}

ScreenBrandHeader wraps the brand mark in a screen-aware container used by the Sessions, Repos, and More tabs.

Where the assets live

PathPurpose
packages/mobile/assets/wordmark.pngMaster / archival source. Mobile app icons and splash derive from it.
packages/mobile/assets/wordmark-dark.pngUsed by the mobile app for dark themes and by the web package's navbar / footer.
packages/mobile/assets/wordmark-light.pngUsed by the mobile app for light themes and by the web package's navbar / footer.
packages/web/public/brand/wordmark.pngMirrored copy of the master, served as a static asset.
packages/web/public/brand/wordmark-dark.pngServed by the docs navbar, footer, and dashboard connect screen.
packages/web/public/brand/wordmark-light.pngServed by the docs navbar, footer, and dashboard connect screen.
Don't re-export from another package

Don't import the wordmark directly from packages/mobile into packages/web. Astro / Vite would need to bundle a React Native module just to load a PNG. The web package copies the PNGs into public/brand/ and serves them as plain static files.

Usage in code

Navbar (web)

The docs navbar uses a single wordmark link, no icon plate. Both variants are rendered and swapped by Tailwind's dark: selector:

html
<a href="/" class="group flex items-center shrink-0" aria-label="nikcli home">
  <img src="/brand/wordmark-light.png" alt="nikcli" width="158" height="52"
       loading="eager" decoding="async" class="h-8 w-auto dark:hidden" />
  <img src="/brand/wordmark-dark.png"  alt="nikcli" width="158" height="52"
       loading="eager" decoding="async" class="h-8 w-auto hidden dark:block" />
</a>

loading="eager" and the explicit width/height attributes keep the brand from shifting the layout while the rest of the page streams.

Footer

Footer wordmarks are smaller (height 20 px instead of 32 px) to match the typographic scale of the copyright line. The same two-image swap is used.

Dashboard connect screen

packages/web/src/dashboard/components/DashboardShell.tsx uses the wordmark at h-10 (40 px) so the brand reads clearly above the connect form. The screen renders both variants and lets dark: choose.

Do and don't

DoDon't
Use the dark-letter variant on light backgrounds and vice versa.Tint, recolor, or apply opacity to the wordmark on top of busy backgrounds.
Preserve the 632 × 206 aspect ratio.Stretch, skew, or rotate the wordmark.
Pair the wordmark with quiet, single-tone UI chrome.Place the wordmark on top of saturated color, gradients, or photographs without a tonal check.
Reuse BrandMark on mobile or the navbar / footer pattern on web.Hand-rasterize the wordmark from scratch per surface.
Reference wordmark.png only for archival / export pipelines.Reference wordmark.png from a runtime surface — pick the themed variant instead.

Source anchors

NeedFile
Source wordmarkspackages/mobile/assets/wordmark*.png
Web static copiespackages/web/public/brand/wordmark*.png
Web navbarpackages/web/src/components/Navbar.astro
Web footer (marketing)packages/web/src/layouts/Layout.astro
Web footer (docs)packages/web/src/layouts/DocsLayout.astro
Dashboard connectpackages/web/src/dashboard/components/DashboardShell.tsx
Mobile brand markpackages/mobile/components/layout/BrandMark.tsx
Mobile screen headerpackages/mobile/components/layout/ScreenBrandHeader.tsx
Mobile theme hookpackages/mobile/lib/theme.tsx