Skip to content

Commit ec967d7

Browse files
BunsDevclaude
andcommitted
Unify OK Code brand identity across the codebase
- Standardize wordmark casing to "OK Code" (remove CSS uppercase) - Replace hardcoded brand strings with APP_BASE_NAME constant - Fix app bundle ID from com.okcode.okcode to com.openknots.okcode - Unify Windows icon source to use same mark as all other platforms - Fix LICENSE copyright from "OpenKnot" to "OpenKnots" - Fix marketing site "OK CODE API" casing to "OK Code API" - Fill in BRANDING.md TBDs: tagline, one-liner, emoji policy, error voice, WCAG AA target, reduced motion support Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5105833 commit ec967d7

8 files changed

Lines changed: 25 additions & 32 deletions

File tree

BRANDING.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
| **Stage Label** | Dev (development only) |
1414
| **Display Name** | OK Code |
1515
| **Version** | 0.0.1 |
16-
| **Tagline** | `[TBD]` |
17-
| **One-liner Description** | `[TBD]` |
16+
| **Tagline** | A Minimal Web GUI for Coding Agents |
17+
| **One-liner Description** | Chat with Codex and Claude in a modern web UI. Git worktree isolation, diff review, integrated terminal, and more. |
1818
| **Parent Organization** | OpenKnots |
19-
| **Website URL** | `[TBD]` |
19+
| **Website URL** | `[TBD]` |
2020
| **Repository** | `OpenKnots/okcode` |
2121

2222
### Brand Voice & Tone
@@ -27,8 +27,8 @@
2727
| **Tone** | Confident but not arrogant; technical but accessible |
2828
| **Copy Style** | Action-oriented imperatives ("New Thread", "Terminal", "Settings"); no unnecessary filler words |
2929
| **Audience** | Software engineers and technical users |
30-
| **Emoji Usage** | `[TBD — currently none in the UI]` |
31-
| **Error/Empty States Voice** | `[TBD]` |
30+
| **Emoji Usage** | None in UI copy; reserved for user-generated content only |
31+
| **Error/Empty States Voice** | Concise and helpful; state what happened and what to do next, no blame or humor |
3232

3333
---
3434

@@ -256,7 +256,7 @@ A subtle **fractal noise SVG overlay** is applied to `body::after` at **3.5% opa
256256
| Disabled opacity | `opacity-64` |
257257
| Disabled interaction | `pointer-events: none` |
258258
| Placeholder text | `muted-foreground/72` (72% opacity) |
259-
| Contrast standard | `[TBD — WCAG level target]` |
259+
| Contrast standard | WCAG 2.1 AA minimum |
260260

261261
---
262262

@@ -321,7 +321,7 @@ The app includes bespoke SVG icons for:
321321

322322
| Property | Value |
323323
| -------------------------------- | ------- |
324-
| `prefers-reduced-motion` support | `[TBD]` |
324+
| `prefers-reduced-motion` support | Respect; disable non-essential animations when set |
325325
| Global animation toggle | `[TBD]` |
326326

327327
---
@@ -385,19 +385,19 @@ Built with:
385385

386386
The following need to be provided/decided:
387387

388-
- [ ] **Tagline** — short memorable phrase
389-
- [ ] **One-liner description** — for app stores, meta tags, social cards
388+
- [x] **Tagline** — "A Minimal Web GUI for Coding Agents"
389+
- [x] **One-liner description** — see Brand Identity table above
390+
- [x] **WCAG contrast target** — AA minimum
391+
- [x] **Reduced motion support** — respect `prefers-reduced-motion`
392+
- [x] **Emoji policy** — none in UI copy
393+
- [x] **Error/empty state voice** — concise and helpful
390394
- [ ] **Logo mark description** — what does the mark depict?
391395
- [ ] **Logo usage guidelines** — minimum size, clear space, do's and don'ts
392396
- [ ] **Heading type scale** — H1–H6 sizes and weights
393-
- [ ] **WCAG contrast target** — AA or AAA?
394-
- [ ] **Reduced motion support** — respect `prefers-reduced-motion`?
395397
- [ ] **Website URL**
396398
- [ ] **Social media handles / links**
397399
- [ ] **App store descriptions**
398400
- [ ] **Open Graph / social card image**
399401
- [ ] **Brand color as hex** — the primary `oklch(0.488 0.217 264)` converts to approximately **#2b4acb** (a deep blue-violet); confirm this is the intended brand hex
400402
- [ ] **Secondary brand color** — is there a distinct secondary brand color beyond the neutral system?
401-
- [ ] **Emoji policy** — use in UI copy, notifications, etc.?
402-
- [ ] **Error/empty state voice** — tone for error messages, empty states, onboarding
403403
- [ ] **Icon stroke width** — confirm Lucide default (2) or custom

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2026 OpenKnot
3+
Copyright (c) 2026 OpenKnots
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

apps/desktop/scripts/electron-launcher.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { fileURLToPath } from "node:url";
1818

1919
const isDevelopment = Boolean(process.env.VITE_DEV_SERVER_URL);
2020
const APP_DISPLAY_NAME = isDevelopment ? "OK Code (Dev)" : "OK Code";
21-
const APP_BUNDLE_ID = "com.okcode.okcode";
21+
const APP_BUNDLE_ID = "com.openknots.okcode";
2222
const LAUNCHER_VERSION = 1;
2323

2424
const __dirname = dirname(fileURLToPath(import.meta.url));

apps/desktop/src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const DESKTOP_SCHEME = "okcode";
8080
const ROOT_DIR = Path.resolve(__dirname, "../../..");
8181
const isDevelopment = Boolean(process.env.VITE_DEV_SERVER_URL);
8282
const APP_DISPLAY_NAME = isDevelopment ? "OK Code (Dev)" : "OK Code";
83-
const APP_USER_MODEL_ID = "com.okcode.okcode";
83+
const APP_USER_MODEL_ID = "com.openknots.okcode";
8484
const USER_DATA_DIR_NAME = isDevelopment ? "okcode-dev" : "okcode";
8585
const LEGACY_USER_DATA_DIR_NAME = isDevelopment ? "T3 Code (Dev)" : "T3 Code (Alpha)";
8686
const COMMIT_HASH_PATTERN = /^[0-9a-f]{7,40}$/i;

apps/marketing/components/workflows-section.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ function ApiMockup() {
203203
return (
204204
<div className="flex items-center justify-center h-full">
205205
<div className="bg-secondary/50 rounded-lg px-4 py-2 border border-border/50">
206-
<span className="text-xs font-mono text-muted-foreground">OK CODE API</span>
206+
<span className="text-xs font-mono text-muted-foreground">OK Code API</span>
207207
</div>
208208
</div>
209209
);

apps/web/src/components/Sidebar.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import {
5050
useAppSettings,
5151
} from "../appSettings";
5252
import { isElectron } from "../env";
53-
import { APP_VERSION } from "../branding";
53+
import { APP_BASE_NAME, APP_VERSION } from "../branding";
5454
import { cn, isLinuxPlatform, isMacPlatform, newCommandId, newProjectId } from "../lib/utils";
5555
import { useStore } from "../store";
5656
import { shortcutLabelForCommand } from "../keybindings";
@@ -1805,8 +1805,8 @@ export default function Sidebar() {
18051805
render={
18061806
<div className="wordmark-stitch flex min-w-0 flex-1 items-center justify-center gap-1.5 cursor-pointer mx-auto px-3 py-1.5 rounded-lg">
18071807
<OkCodeMark className="size-6 text-foreground drop-shadow-[0_1px_0_rgba(255,255,255,0.15)]" />
1808-
<span className="truncate text-base font-semibold tracking-wide text-foreground uppercase drop-shadow-[0_1px_0_rgba(255,255,255,0.15)]">
1809-
OK Code
1808+
<span className="truncate text-base font-semibold tracking-wide text-foreground drop-shadow-[0_1px_0_rgba(255,255,255,0.15)]">
1809+
{APP_BASE_NAME}
18101810
</span>
18111811
</div>
18121812
}
@@ -1860,7 +1860,7 @@ export default function Sidebar() {
18601860
onClick={() => {
18611861
toastManager.add({
18621862
type: "info",
1863-
title: `OK Code ${serverUpdateInfo.latestVersion} available`,
1863+
title: `${APP_BASE_NAME} ${serverUpdateInfo.latestVersion} available`,
18641864
description: `Update with: npm install -g okcodes@latest`,
18651865
});
18661866
}}

scripts/build-desktop-artifact.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ const createBuildConfig = Effect.fn("createBuildConfig")(function* (
519519
macEntitlementsPlistAbsolutePath: string | undefined,
520520
) {
521521
const buildConfig: Record<string, unknown> = {
522-
appId: "com.okcode.okcode",
522+
appId: "com.openknots.okcode",
523523
productName,
524524
artifactName: "OK-Code-${version}-${arch}.${ext}",
525525
directories: {

scripts/generate-brand-assets.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#!/usr/bin/env python3
22
"""Regenerate favicons and desktop icon PNGs/ICOs from assets/source/okcode-mark-512.png.
33
4-
Windows `.ico` files use `assets/source/openknot-mark-512.png` when present (OpenKnots org
5-
mark); otherwise they fall back to the OK Code mark.
4+
All platforms (macOS, Windows, Linux, iOS, web) use the same OK Code mark as their source.
65
76
Requires Pillow (`python3 -m pip install pillow` if missing).
87
Run from repository root: python3 scripts/generate-brand-assets.py
@@ -22,7 +21,6 @@
2221

2322
ROOT = Path(__file__).resolve().parents[1]
2423
SRC = ROOT / "assets/source/okcode-mark-512.png"
25-
OPENKNOT_MARK_SRC = ROOT / "assets/source/openknot-mark-512.png"
2624

2725
ICO_SIZES_WEB = (16, 32, 48)
2826
ICO_SIZES_DESKTOP = (16, 32, 48, 64, 128, 256)
@@ -99,11 +97,6 @@ def main() -> None:
9997

10098
img = Image.open(SRC).convert("RGBA")
10199

102-
if OPENKNOT_MARK_SRC.exists():
103-
windows_icon_source = Image.open(OPENKNOT_MARK_SRC).convert("RGBA")
104-
else:
105-
windows_icon_source = img
106-
107100
# Master 1024 for desktop / marketing hero
108101
mark_1024 = resize(img, 1024)
109102
prod_dir = ROOT / "assets/prod"
@@ -133,8 +126,8 @@ def main() -> None:
133126

134127
save_ico(prod_dir / "okcode-web-favicon.ico", img, ICO_SIZES_WEB)
135128
save_ico(dev_dir / "okcode-dev-web-favicon.ico", img, ICO_SIZES_WEB)
136-
save_ico(prod_dir / "okcode-windows.ico", windows_icon_source, ICO_SIZES_DESKTOP)
137-
save_ico(dev_dir / "okcode-dev-windows.ico", windows_icon_source, ICO_SIZES_DESKTOP)
129+
save_ico(prod_dir / "okcode-windows.ico", img, ICO_SIZES_DESKTOP)
130+
save_ico(dev_dir / "okcode-dev-windows.ico", img, ICO_SIZES_DESKTOP)
138131

139132
# Marketing site: large nav icon + same favicons as prod web
140133
mkt = ROOT / "apps/marketing/public"

0 commit comments

Comments
 (0)