Communitygithub.com

marmelab/atomic-crm

重新品牌化 Atomic CRM — 更改应用徽标(页眉及登录/注册页面上的文字标记)和/或标题/名称。当用户想要更改、替换、更新或重新品牌化 CRM 徽标或标题时使用。处理明/暗两种模式的徽标变体、标题硬编码的三个位置、指向它们的配置,以及(可选)浏览器图标和 PWA 应用图标。

atomic-crm 是什么?

Atomic CRM 品牌更新技能允许开发者系统性地更改 CRM 应用的徽标和标题,覆盖所有显示位置和模式。徽标以两种资产系列存在:应用文字标记(SVG)和图标的浏览器/PWA 图标集(34 个 PNG)。该技能详细说明了如何通过覆盖 `src/components/atomic-crm/root/logos/` 目录中的文件来替换徽标,并更新 `defaultConfiguration.ts` 中的导入。标题在三个位置硬编码:`defaultConfiguration.ts`(驱动页眉 `<h1>` 和徽标 `alt` 文本)、`index.html`(浏览器标签页标题)和 `manifest.json`(PWA 短名称和全名称)。该技能还解释了代码默认值与 `/settings` 页面运行时设置之间的冲突:设置将品牌数据保存到每个浏览器的 `localStorage` 中,这可能会遮盖代码更改。如果更改后没有视觉效果,用户必须清除 `CRM.app.configuration` localStorage 键。该技能支持 Cursor 和 Claude Code 等平台,提供明确的退出条件、验证步骤以及对常见错误(如只编辑一个徽标变体或忘记更新所有标题位置)的警告。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/marmelab/atomic-crm/tree/HEAD/.claude/skills/update-branding

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

更新品牌

概述

更改 CRM 徽标 和/或 标题。徽标在 两种主题 下显示于 五个屏幕(桌面 + 移动页眉、登录、注册、确认页面),标题在 三个 地方硬编码,单文件编辑会遗漏一个。以下步骤涵盖了所有情况。 退出标准:徽标在两种主题下、所有五个屏幕上正确渲染,并且在页眉、浏览器标签页和 PWA 名称中标题保持一致。

何时使用

  • 用户想要更改、替换或重新品牌化 CRM 徽标和/或标题/名称。
  • 可选:当用户还要求更新浏览器图标或 PWA 应用图标时。

不适用于主题颜色或组件样式,请参阅 Skill({skill: "shadcn-customization"})。

徽标:两个资产系列

确认用户指的是哪一个 — 大多数请求仅指 #1。

  1. 应用徽标 / 文字标记(常见)—— src/components/atomic-crm/root/logos/,由 defaultConfiguration.ts 作为模块资产导入(Vite 解析相对于 JS 块的 URL,因此它能存活于嵌套路由如 /oauth/consent 和子路径部署)。logo_atomic_crm_dark.svg 是 浅色 图案,在 暗模式 + 所有认证页面 显示;logo_atomic_crm_light.svg 是 深色 图案,在 亮模式 显示。(一个独立未使用的 logo_atomic_crm.svg 仍存在于 public/logos/ 中。)

    文件以 它们显示的模式 命名,而不是它们的颜色 — “暗模式”徽标必须在深色背景上可读。

  2. 浏览器图标 + PWA 图标 — 仅在被要求时。更大(34 个 PNG);请参阅 下方。

代码默认值与运行时设置 — 它们冲突

  • 代码默认值(本技能): 编辑 defaultConfiguration.ts + 资产。提交后,全局生效,并且是更改浏览器标签页标题 / 浏览器图标 / PWA 图标的唯一方式。
  • 设置 UI(/settings → 品牌,SettingsPage.tsx):已登录用户编辑标题 + 上传徽标,每个浏览器,保存到 localStorage 作为 CRM.app.configuration(徽标作为 base64),永远不会提交。仅覆盖应用内徽标 + 页眉标题。

⚠️ 存储会遮盖代码。 useConfigurationContext 返回 { ...defaultConfiguration, ...storedConfig }(ConfigurationContext.tsx)。如果品牌曾经通过 /settings 保存过,你对 defaultConfiguration.ts 的编辑在该浏览器中不会体现 — 清除 CRM.app.configuration localStorage 键。当代码更改没有视觉效果时,请怀疑此问题。

步骤

  1. 获取资产。 询问文件/URL、格式(SVG 还是 PNG),以及是否有 单独的明/暗变体 或仅一张图片。
    • 一个变体 → 将两者都设置为同一个配置键;警告 在一个主题中对比度可能较差(认证页面始终使用暗模式键)。
    • 单色填充 SVG → 通过交换填充颜色(white ↔ black)派生另一个变体。
  2. 放置文件 到 src/components/atomic-crm/root/logos/:
    • 直接覆盖(最简单): 覆盖 logo_atomic_crm_dark.svg / logo_atomic_crm_light.svg,保留完全相同的文件名 + .svg。defaultConfiguration.ts 中的导入已经指向此处 — 完成。(仅限 SVG。)
    • 新名称 / 格式(例如 PNG): 将其作为新文件保存在它们旁边,然后更新 defaultConfiguration.ts 顶部的两个 import 语句(它们提供 defaultDarkModeLogo / defaultLightModeLogo;模块相对路径,因此是 "./logos/<file>")。不要 将它们恢复为裸公共路径字符串 — 那会重新引入问题 #291。
  3. 更新标题(如果名称更改)在所有 三个 位置 — defaultTitle 仅驱动第一个:
    • defaultConfiguration.ts → defaultTitle — 页眉 <h1> + 徽标 alt 文本。
    • index.html → <title> — 浏览器标签页标题(硬编码,不在运行时设置)。
    • public/manifest.json → short_name + name — 已安装的 PWA 名称。

消费者(如果保留配置键则无需编辑):layout/Header.tsx + dashboard/MobileDashboard.tsx 渲染两个变体(CSS 切换,h-6);login/{LoginPage,SignupPage,ConfirmationRequired}.tsx 仅渲染 darkModeLogo。

常见误区

误区现实
“我更改了徽标文件,这就完成了全部工作。”徽标在两种主题下、五个屏幕上显示,标题存在于三个文件中。一次编辑会遗漏一个变体。
“我的代码更改没有视觉效果,所以它没有生效。”/settings 存储会遮盖每个浏览器的 defaultConfiguration.ts。清除 CRM.app.configuration localStorage 键。
“一张图片对两种主题都适用。”认证页面始终使用暗模式键;一个资产在一个背景上会显示错误。警告或派生第二个变体。
“我将重新生成几个图标尺寸。”PWA 集是 34 个 PNG。从一个源文件重新生成所有尺寸,或让用户提供整个集合,不要手动编辑几个。

红旗

  • 只编辑两个徽标资产键中的一个,或者交换明/暗文件。
  • 在 defaultConfiguration.ts 中更改了标题,但没有更改 index.html 和 manifest.json。
  • 代码更改没有视觉效果,且 CRM.app.configuration 存储未被清除。
  • 手动编辑一部分浏览器图标/PWA 尺寸,而不是重新生成完整集合。
  • 在没有被要求的情况下触碰文档站点徽标(doc/)。

验证

make typecheck 只能捕获配置键拼写错误。然后 make start 并检查:两种主题 下的 桌面 + 移动 页眉;登录/注册 页面(深色背景);如果标题更改了,检查页眉 <h1>、浏览器标签页和 PWA 名称。如果徽标在恰好一个主题中错误,意味着两个键指向同一个资产,或者明/暗文件被交换。

  • 两个徽标变体都指向正确的明/暗资产(按显示模式命名,而非颜色)。
  • 徽标在两种主题、桌面 + 移动以及登录/注册/确认页面上均正确渲染。
  • 如果名称更改,标题已在 defaultConfiguration.ts、index.html 和 manifest.json 中更新。
  • 如果没有视觉影响,CRM.app.configuration localStorage 键已被清除。
  • 浏览器图标/PWA 图标仅在明确要求时作为完整集合重新生成。

浏览器图标 & 应用图标(可选)

仅在被要求时。被 index.html + public/manifest.json 引用:public/favicon.ico 和 public/appIcon/*.png(34 个尺寸,包括 maskable_icon*)。从一个正方形源文件(sharp / pwa-asset-generator)重新生成 每一个 尺寸,或要求用户提供集合 — 不要手动编辑几个。首先确认范围;manifest.json 中的 theme_color/background_color 可能也需要更新。

文档站点徽标(doc/astro.config.mjs → doc/public/logo_atomic_crm_*.svg)是一个独立的 Astro 站点 — 除非被要求,否则不要动。

相关技能