Skip to content

docs(brand): add brand foundation page on archon.diy#1745

Merged
Wirasm merged 2 commits into
devfrom
docs/brand
May 25, 2026
Merged

docs(brand): add brand foundation page on archon.diy#1745
Wirasm merged 2 commits into
devfrom
docs/brand

Conversation

@leex279
Copy link
Copy Markdown
Collaborator

@leex279 leex279 commented May 21, 2026

Summary

  • Problem: Archon has no published brand guide. UI work (production web, the /console experiment, marketing surfaces) drifts because there's no canonical reference for colors, gradient, logo, or typography.
  • Why it matters: Without a single source of truth, contributors invent hex values per package and the brand fragments quickly.
  • What changed: Mounts the canonical Penpot-exported brand sheet on archon.diy under a new Brand section, with a Starlight overview page and Quick reference at the top. Adds a CLAUDE.md rule requiring future UI work to align with the brand foundation. Also fixes the dark-mode "active sidebar link" being unreadable.
  • What did NOT change (scope boundary): No changes to packages/web/ design tokens, no changes to any application UI. This PR is docs-only plus a single-section CLAUDE.md rule. Token migration is deliberately left for follow-up.

UX Journey

Before

Contributor wants brand colors
  → no canonical doc exists
  → reads packages/web/src/index.css → finds blue oklch tokens
  → assumes those are the brand
  → ships UI that does not match the actual brand (magenta/violet/teal)

After

Contributor wants brand colors
  → docs sidebar shows [🎨 Brand]                         <-- new
  → archon.diy/brand/ shows Quick reference + full sheet  <-- new
  → CLAUDE.md flags brand alignment as a hard requirement <-- new
  → contributor uses correct tokens

Architecture Diagram

Before

packages/docs-web/
├── src/content/docs/{book,getting-started,guides,...}
├── src/styles/custom.css       (dark-mode sidebar active state: unreadable)
├── astro.config.mjs            (sidebar: no Brand entry)
└── public/                     (no brand assets)

After

packages/docs-web/
├── src/content/docs/
│   └── brand/                  [+] new section
│       └── index.md            [+] Quick reference + embedded foundation
├── src/styles/custom.css       [~] adds white text on active sidebar link
├── astro.config.mjs            [~] adds {label:'🎨  Brand', link:'/brand/'}
├── public/brand/
│   └── foundation.html         [+] Penpot standalone, top-right "Console →" patched out
└── scripts/brand/              [+] re-runnable patch pipeline
    ├── _find-console.ts        [+] inspect bundled JSX assets
    ├── _dump.ts                [+] extract a manifest entry
    ├── _patch.ts               [+] apply our customisations idempotently
    └── README.md               [+] when/how to re-run after re-export

CLAUDE.md                       [~] new section: UI and Visual Design (brand alignment rule)

Connection inventory:

From To Status Notes
astro.config.mjs sidebar /brand/ route new Starlight Brand entry
content/docs/brand/index.md /brand/foundation.html new iframe embed
scripts/brand/_patch.ts public/brand/foundation.html new one-shot maintenance script (not invoked at build time)
CLAUDE.md (root) brand foundation URL new doc rule, not code
custom.css .sidebar-content a[aria-current='page'] --sl-color-white modified text color fix

Label Snapshot

  • Risk: risk: low
  • Size: size: M (mostly the 1.5 MB self-contained brand HTML asset; logic surface is small)
  • Scope: docs
  • Module: docs:brand

Change Metadata

  • Change type: docs
  • Primary scope: docs

Linked Issue

  • Closes #
  • Related #
  • Depends on #
  • Supersedes #

No tracking issue — this introduces a new docs section requested in-session.

Validation Evidence (required)

bun run lint           # ✓ pass (zero warnings; --max-warnings 0)
bun run format:check   # ✓ pass (all files Prettier-formatted)
bun --filter @archon/docs-web build  # ✓ 73 pages built (was 72; +/brand/)
  • Evidence provided: docs-web build produced /brand/index.html and the new sidebar entry renders without errors. bun run test and full validate intentionally skipped — this PR touches docs/CSS/MJS config only, no TypeScript runtime code, no schemas, no tests; husky's lint-staged ran prettier + eslint on the staged files and passed.
  • If any command is intentionally skipped, explain why: bun run test and bun run type-check skipped because no app TypeScript was modified. The helper scripts under scripts/brand/ are standalone one-shot maintenance utilities (not in any tsconfig include path); they execute under bun directly.

Security Impact (required)

  • New permissions/capabilities? No
  • New external network calls? Nofoundation.html is fully self-contained (Penpot bundles all assets as base64 in the manifest).
  • Secrets/tokens handling changed? No
  • File system access scope changed? No
  • Notes: the bundled JSX inside foundation.html runs in the docs-site origin via an <iframe> from /brand//brand/foundation.html (same-origin). The bundler decodes base64 assets into URL.createObjectURL blobs; no remote fetches.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Database migration needed? No
  • Upgrade steps: none.

Human Verification (required)

  • Verified scenarios:
    • Local docs dev (bun --filter @archon/docs-web dev) renders /brand/ with the iframe, Quick reference, and Open-in-new-tab link.
    • The dark-mode active sidebar entry is readable (white text on the gradient pill).
    • The top-right Console → cross-link in foundation.html is gone after the patch; the body example variant ("Lockup with product" with subtitle="Console") and the body CTA ("See the Console") were intentionally left alone.
    • bun --filter @archon/docs-web build produces 73 pages (was 72) with no errors.
  • Edge cases checked:
    • Re-running _patch.ts after the patch fails loudly ("header block start not found — already patched?") — idempotent enough to detect re-application against a stale HTML.
    • Hex-colored Quick-reference codes are readable in both gradient swatches and the surface chip (white-pill background ensures the near-black #0F1115 stays legible).
  • What was not verified:
    • The deployed archon.diy site (the docs deploy job runs on push to main, so the route will go live only after this dev PR is merged and a release brings devmain).
    • Light mode for the sidebar active state — only dark mode was reported broken and only dark mode was fixed (light mode was already legible).

Side Effects / Blast Radius (required)

  • Affected subsystems/workflows:
    • archon.diy docs site — adds a new /brand/ route, adds one sidebar entry, recomputes Pagefind search index.
    • All future UI contributors — the new CLAUDE.md rule will be loaded into every agent session.
  • Potential unintended effects:
    • The new sidebar entry shifts the rest of the sidebar down by one row; visible only as a layout nudge.
    • The 1.5 MB foundation.html increases the docs site build output. It is loaded only when a visitor opens /brand/ (lazy iframe).
  • Guardrails / monitoring: scripts/brand/README.md documents when to re-run the patch (after a fresh Penpot export). The patch fails loudly if its source markers no longer match — no silent drift.

Rollback Plan (required)

  • Fast rollback command/path: git revert <merge-commit> on dev. Single-commit PR, no schema or runtime coupling, so rollback is contained to docs.
  • Feature flags / config toggles: none.
  • Observable failure symptoms: broken docs build (would block deploy-docs.yml on main), or the /brand/ route 404-ing.

Risks and Mitigations

  • Risk: foundation.html is a generated asset; future re-exports from Penpot will overwrite our top-right pill removal.

    • Mitigation: the patch pipeline under scripts/brand/ is documented and idempotent; the README spells out exactly when to re-run it. The patch script fails loudly if its expected markers are not found, so silent drift is impossible.
  • Risk: The CLAUDE.md rule is broad ("all UI changes must align with the brand foundation") and could be misread as blocking small refactors.

    • Mitigation: Rule explicitly scopes to visual tokens (colors, gradients, surfaces, typography) and points contributors at the canonical guide. It is a guardrail against ad-hoc hex values, not a freeze on refactoring.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Introduced interactive brand foundation explorer with live theme and accent color customization
  • Documentation

    • Added brand guidelines section requiring consistent use of design tokens across all visual surfaces
    • Created brand foundation reference guide with design tokens, typography, and component showcase

Review Change Stack

- Mount the canonical Archon brand sheet at `/brand/` in the docs site
  (Penpot-exported standalone HTML, top-right "Console →" cross-link
  surgically removed via a re-runnable patch script).
- Add a Starlight overview page with a Quick reference (gradient,
  surface) and an embedded full brand sheet.
- Sidebar gains a "🎨 Brand" entry between Roadmap and The Book of Archon.
- Fix the dark-mode active sidebar link being unreadable
  (`color: var(--sl-color-white)`).
- Require future UI changes to align with the brand foundation
  (new "UI and Visual Design" section in root CLAUDE.md).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fddc1b29-d91f-4529-94db-ac3590f8cb3c

📥 Commits

Reviewing files that changed from the base of the PR and between 4587e9e and c56cf5e.

⛔ Files ignored due to path filters (1)
  • packages/docs-web/public/brand/assets/archon-logo.png is excluded by !**/*.png
📒 Files selected for processing (7)
  • packages/docs-web/public/brand/README.md
  • packages/docs-web/public/brand/app.css
  • packages/docs-web/public/brand/brand-app.jsx
  • packages/docs-web/public/brand/foundation.html
  • packages/docs-web/public/brand/logo.jsx
  • packages/docs-web/public/brand/standalone-tweaks-toggle.jsx
  • packages/docs-web/public/brand/tweaks-panel.jsx
💤 Files with no reviewable changes (1)
  • packages/docs-web/public/brand/foundation.html
✅ Files skipped from review due to trivial changes (1)
  • packages/docs-web/public/brand/README.md

📝 Walkthrough

Walkthrough

Adds a new brand documentation section to the Archon docs site with UI contributor guidelines requiring brand-aligned design tokens, introduces comprehensive CSS theme tokens and global styling, creates reusable logo and form control components, and builds an interactive brand foundation showcase app with theme switching and sticky section navigation, all loaded via an HTML entrypoint using Babel-standalone JSX compilation.

Changes

Brand Documentation and Foundation System

Layer / File(s) Summary
Brand guidelines and documentation infrastructure
CLAUDE.md, packages/docs-web/astro.config.mjs, packages/docs-web/src/content/docs/brand/index.md, packages/docs-web/src/styles/custom.css, packages/docs-web/public/brand/README.md
Adds "UI and Visual Design" contributor guideline requiring brand-aligned design tokens; updates site navigation to expose /brand/ section; adds brand documentation page with token quick-reference and embedded foundation iframe; fixes dark-theme sidebar current-page link color; documents brand foundation file structure and runtime JSX loading approach via Babel-standalone.
Theme token system and global styling
packages/docs-web/public/brand/app.css
Defines comprehensive CSS custom properties for dark/light themes (backgrounds, surfaces, borders, text, brand duotone gradients, accent variants, status colors, shadows), applies global baseline styles (box-sizing, typography, selection, scrollbar, focus-visible), and includes brand utility classes (.brand-text, .brand-bar) and keyframe animations (pulse-dot, fade-in, scale-in, shimmer).
Logo component system
packages/docs-web/public/brand/logo.jsx
Introduces reusable logo renderers: ArchonMark (multi-color PNG), ArchonGlyph (monochrome SVG), ArchonLockup (flex lockup with text/subtitle), and getArchonLogoSrc() for conditional asset path resolution. Exports all to window for non-module access.
Tweaks panel form control framework
packages/docs-web/public/brand/tweaks-panel.jsx
Defines complete tweaks UI suite: useTweaks() hook for state and host communication, TweaksPanel overlay component with message protocol and viewport-clamped dragging, layout helpers, and 10 reusable form controls (slider, toggle, radio with segment drag, select, text, number with scrubbing, color with palette chips and contrast-aware checkmarks, button). All exported to window for non-module HTML usage; embedded CSS provides fixed-position panel styling and form control layouts.
Standalone tweaks toggle and navigation helper
packages/docs-web/public/brand/standalone-tweaks-toggle.jsx
Implements StandaloneTweaksToggle component that listens for __activate_edit_mode / __deactivate_edit_mode messages to open/close tweaks panel and renders a fixed "Tweaks" button. Includes getBuddyHref() helper to navigate between standalone and non-standalone brand/console variants by inspecting current pathname.
Foundation HTML entrypoint and brand showcase app
packages/docs-web/public/brand/foundation.html, packages/docs-web/public/brand/brand-app.jsx
foundation.html loads Geist fonts, app.css, and external React/DOM/Babel scripts, then mounts local JSX modules (logo, tweaks, toggle, brand-app). BrandApp renders full brand tour with sticky section navigator (Logo, Gradient, Palette, Type, Components, Voice, Tokens), IntersectionObserver-tracked scroll, useTweaks theme/accent controls, BrandAccentSwatches for interactive palette switching, and renders TweaksPanel + StandaloneTweaksToggle overlay UI.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • coleam00/Archon#772: Updates contributor-facing UI/design guidance in CLAUDE.md with related brand and design standards.
  • coleam00/Archon#1022: Modifies Starlight dark-theme sidebar styling in packages/docs-web/src/styles/custom.css, overlapping with this PR's sidebar color fix.

Suggested reviewers

  • coleam00
  • Wirasm

Poem

🎨 A brand foundation blooms,
with tokens, swatches, glyphs in rooms—
Tweaks dance on segments, colors glow,
themes shift dark to light's soft show.
The Archon mark hops, grins, and glides,
guiding wanderers far and wide. 🐰✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 51.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding a brand foundation page to archon.diy docs. It is specific, accurate, and directly reflects the primary objective.
Description check ✅ Passed The description is comprehensive and well-structured, covering all required template sections including Summary (with Problem/Why/What changed), UX Journey (Before/After), Architecture Diagram, Labels, Validation Evidence, Security Impact, Compatibility, Human Verification, and Rollback Plan.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/brand

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
packages/docs-web/scripts/brand/_patch.ts (1)

12-13: 💤 Low value

Whitespace-sensitive string matching is fragile across re-exports.

HEADER_BLOCK_START and HEADER_BLOCK_END hard-code exact indentation (' <div ...', ' </a>\n </div>'). A Penpot re-export that changes formatter settings, prettier width, or tab/space style will cause indexOf to return -1 and the script to throw "already patched?" — which is misleading and will send the next maintainer down the wrong debugging path.

Consider either matching with a tolerant regex (leading whitespace + structural anchors) or updating the "already patched?" message to acknowledge both possibilities so the failure mode points at the real cause.

♻️ Minimal message tweak
-if (startIdx < 0) throw new Error('header block start not found — already patched?');
+if (startIdx < 0) {
+  throw new Error(
+    'header block start not found — already patched, or the Penpot export changed; ' +
+    'rerun _find-console.ts and update HEADER_BLOCK_START / TARGET_UUID',
+  );
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs-web/scripts/brand/_patch.ts` around lines 12 - 13, The
hard-coded whitespace in HEADER_BLOCK_START and HEADER_BLOCK_END makes indexOf
matching fragile; update the patch logic in this file to use tolerant matching
(e.g., test with a regex that allows leading/trailing whitespace and matches the
HTML structure) instead of strict string indexOf, or at minimum broaden the
failure message that currently says "already patched?" to mention possible
whitespace/formatting mismatches; refer to symbols HEADER_BLOCK_START,
HEADER_BLOCK_END, and the indexOf-based check in this file and replace it with a
regex-driven search (or change the error text) so formatting changes don't cause
a misleading -1 match.
packages/docs-web/scripts/brand/_dump.ts (1)

4-9: 💤 Low value

Add a minimal usage check and clarify the magic line index.

When invoked with missing args, readFileSync(undefined) throws a confusing ERR_INVALID_ARG_TYPE instead of a usage hint, and the i >= 180 heuristic is unexplained and duplicated across the three sibling scripts. A short guard plus a one-line comment makes this one-shot helper friendlier without overengineering.

♻️ Suggested tweak
-const file = readFileSync(process.argv[2], 'utf8');
-const uuid = process.argv[3];
-const outFile = process.argv[4];
-
-const lines = file.split('\n');
-const manifestLine = lines.find((l, i) => i >= 180 && l.startsWith('{"'));
+const [, , inPath, uuid, outFile] = process.argv;
+if (!inPath || !uuid || !outFile) {
+  console.error('usage: bun _dump.ts <foundation.html> <uuid> <out>');
+  process.exit(1);
+}
+const file = readFileSync(inPath, 'utf8');
+const lines = file.split('\n');
+// Manifest JSON is appended near the bottom of the Penpot export; skip the head
+// HTML/JS so we do not match an earlier `{"` literal in inline scripts.
+const manifestLine = lines.find((l, i) => i >= 180 && l.startsWith('{"'));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs-web/scripts/brand/_dump.ts` around lines 4 - 9, Add a minimal
usage guard and document the magic index: check process.argv[2], [3], [4] at the
top and print a short usage message (e.g. expected: input-file uuid out-file)
then exit if missing to avoid readFileSync(undefined) errors; add a one-line
comment above the manifestLine declaration explaining the heuristic "i >= 180"
(why we're looking past header lines) and keep the same lines.find usage
(manifestLine) so behavior is unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/docs-web/scripts/brand/_patch.ts`:
- Around line 45-55: The post-patch check currently only logs the count from
patched.match(/Console →/g) (variable verify) but still proceeds to re-encode
and write the file; change this to enforce the invariant by throwing an error if
verify.length !== 1 before performing the gzip/Buffer re-encoding and the
manifest update (manifest[TARGET_UUID] = ...) and before
writeFileSync(lines.join('\n')) so the file is never overwritten in an
inconsistent state; include a clear message referencing the expected "Console →
occurrences: 1" and the actual count to aid debugging.

---

Nitpick comments:
In `@packages/docs-web/scripts/brand/_dump.ts`:
- Around line 4-9: Add a minimal usage guard and document the magic index: check
process.argv[2], [3], [4] at the top and print a short usage message (e.g.
expected: input-file uuid out-file) then exit if missing to avoid
readFileSync(undefined) errors; add a one-line comment above the manifestLine
declaration explaining the heuristic "i >= 180" (why we're looking past header
lines) and keep the same lines.find usage (manifestLine) so behavior is
unchanged.

In `@packages/docs-web/scripts/brand/_patch.ts`:
- Around line 12-13: The hard-coded whitespace in HEADER_BLOCK_START and
HEADER_BLOCK_END makes indexOf matching fragile; update the patch logic in this
file to use tolerant matching (e.g., test with a regex that allows
leading/trailing whitespace and matches the HTML structure) instead of strict
string indexOf, or at minimum broaden the failure message that currently says
"already patched?" to mention possible whitespace/formatting mismatches; refer
to symbols HEADER_BLOCK_START, HEADER_BLOCK_END, and the indexOf-based check in
this file and replace it with a regex-driven search (or change the error text)
so formatting changes don't cause a misleading -1 match.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f090bbde-c74e-4b44-896c-7682c02d7eaf

📥 Commits

Reviewing files that changed from the base of the PR and between aa71520 and 4587e9e.

📒 Files selected for processing (9)
  • CLAUDE.md
  • packages/docs-web/astro.config.mjs
  • packages/docs-web/public/brand/foundation.html
  • packages/docs-web/scripts/brand/README.md
  • packages/docs-web/scripts/brand/_dump.ts
  • packages/docs-web/scripts/brand/_find-console.ts
  • packages/docs-web/scripts/brand/_patch.ts
  • packages/docs-web/src/content/docs/brand/index.md
  • packages/docs-web/src/styles/custom.css

Comment on lines +45 to +55
const verify = patched.match(/Console →/g) ?? [];
console.log(`Console → occurrences: ${verify.length} (was 2, should be 1 after patch)`);

const reEncoded = entry.compressed
? gzipSync(Buffer.from(patched, 'utf8')).toString('base64')
: Buffer.from(patched, 'utf8').toString('base64');

manifest[TARGET_UUID] = { ...entry, data: reEncoded };
lines[manifestLineIdx] = JSON.stringify(manifest);

writeFileSync(path, lines.join('\n'));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Enforce the post-patch invariant — don't just log it.

The README states this script is idempotent and "fails loudly if the source no longer matches", and the upstream indexOf guards (lines 37, 39) do fail fast. The post-condition on line 46, however, only prints the Console → count and then proceeds to overwrite foundation.html regardless. If a future Penpot export renames the pill or moves it outside the targeted block, the file silently gets a partial/wrong patch.

Throw when the count is not the expected 1 so the file is never written in an inconsistent state.

🛡️ Suggested fix
-const verify = patched.match(/Console →/g) ?? [];
-console.log(`Console → occurrences: ${verify.length} (was 2, should be 1 after patch)`);
+const verify = patched.match(/Console →/g) ?? [];
+if (verify.length !== 1) {
+  throw new Error(
+    `expected exactly 1 "Console →" occurrence after patch, found ${verify.length}`,
+  );
+}
+console.log(`Console → occurrences: ${verify.length} (was 2, now 1 — OK)`);

As per coding guidelines: "Prefer throwing early with a clear error for unsupported or unsafe states — never silently swallow errors".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs-web/scripts/brand/_patch.ts` around lines 45 - 55, The
post-patch check currently only logs the count from patched.match(/Console →/g)
(variable verify) but still proceeds to re-encode and write the file; change
this to enforce the invariant by throwing an error if verify.length !== 1 before
performing the gzip/Buffer re-encoding and the manifest update
(manifest[TARGET_UUID] = ...) and before writeFileSync(lines.join('\n')) so the
file is never overwritten in an inconsistent state; include a clear message
referencing the expected "Console → occurrences: 1" and the actual count to aid
debugging.

…er scripts

The brand sheet now ships as plain Penpot-exported source (Brand.html shell,
brand-app.jsx, logo.jsx, tweaks-panel.jsx, standalone-tweaks-toggle.jsx,
app.css, archon-logo.png) and is edited like any other code in the repo:
open the JSX, change it, refresh the page.

- public/brand/foundation.html now loads React + Babel from unpkg (with
  integrity hashes) and compiles the JSX in the browser. Adds one local
  override: hide the Penpot Tweaks toggle on the public site.
- brand-app.jsx carries our single local delta: the top-right "Console →"
  cross-link is removed (the sibling Archon Console doc isn't published).
- public/brand/README.md documents what each file owns and the local delta.
- The 1.5 MB self-extracting bundle and the scripts/brand/ decoder pipeline
  (_find-console.ts, _dump.ts, _patch.ts) are deleted. Net: the repo loses
  ~1.5 MB of opaque base64 + 4 maintenance scripts; gains ~85 KB of editable
  source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Wirasm
Copy link
Copy Markdown
Collaborator

Wirasm commented May 22, 2026

@leex279 related to #1731 — both involve docs or model catalog updates.

@Wirasm
Copy link
Copy Markdown
Collaborator

Wirasm commented May 25, 2026

Review Summary

Verdict: ready-to-merge

This PR adds a brand foundation page to the docs site (Archon brand guide with logo, colors, typography) and updates CLAUDE.md to codify brand alignment requirements for future UI work. Clean, well-scoped deliverable with no blocking issues.

Minor / nice-to-have

  • packages/docs-web/public/brand/brand-app.jsx:1: The /* eslint-disable react/prop-types */ pragma is acceptable for standalone JSX compiled in-browser, but future contributors may copy this pattern into real TypeScript files. Consider adding a comment:

    // Standalone JSX (compiled in-browser via Babel) — prop-types not enforced.
    // Do not copy into TypeScript files.
  • packages/docs-web/public/brand/tweaks-panel.jsx:1: The file-level docstring is ~40 lines including a usage example. CLAUDE.md asks to keep multi-line blocks "only when truly necessary." Trim to 1-2 sentences on the host protocol, or move the full usage example to a design-system doc (it will drift from reality as the API evolves).

  • packages/docs-web/public/brand/tweaks-panel.jsx: Section divider comments like // ── Layout helpers ─────────────────────────── add visual weight without explaining invariants. Consider removing or keeping only one at most.

  • packages/docs-web/public/brand/logo.jsx: Component comment blocks restate WHAT the function does rather than WHY you'd choose one over the other. The // Monochrome glyph... comment is the useful exception — keep that one.

Compliments

  • The useTweaks comment in tweaks-panel.jsx documents a subtle API design detail that prevents a silent footgun ("[object Object]" key in persisted JSON) — exactly the kind of WHY that should be captured.
  • The protocol ordering comment in TweaksPanel (// Registers the protocol listener BEFORE announcing availability...) captures a timing-sensitive invariant that would otherwise require tracing the iframe protocol.

Reviewed via maintainer-review-pr workflow (Pi/Minimax). Aspects run: code-review, comment-quality, docs-impact.

@Wirasm Wirasm merged commit 3d779f5 into dev May 25, 2026
4 checks passed
@Wirasm Wirasm deleted the docs/brand branch May 25, 2026 12:22
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.

2 participants