Communitygithub.com

marmelab/atomic-crm

Atomic CRM のリブランド — アプリケーションのロゴ(ヘッダーやログイン/サインアップページのワードマーク)やタイトル/名称を変更します。CRM のロゴやタイトルを変更、交換、更新、リブランドしたい場合に使用します。ライト/ダークモードの2種類のロゴバリエーション、タイトルがハードコードされている3箇所、それらを参照する設定、オプションでブラウザのファビコンや PWA アプリアイコンも処理します。

atomic-crm とは?

このスキルは、Atomic CRM のブランド要素(ロゴとタイトル)を一貫して変更するための包括的な手順を提供します。ロゴは5つの画面(デスクトップ/モバイルヘッダー、ログイン、サインアップ、確認ページ)にわたって2つのテーマ(ライト/ダーク)で表示されるため、単一ファイルの編集では古いバージョンが残ってしまいます。このスキルは、すべてのケースをカバーし、コードのデフォルト設定とブラウザのローカルストレージを使用するランタイム設定の間の競合も解決します。オプションでファビコンや PWA アプリアイコンの更新もサポートします。Claude Code、Cursor などの AI エージェントで使用するよう設計されており、変更の確認手順やよくある間違い(テーマのスワップ、タイトルの更新漏れ、キャッシュのクリア忘れなど)の注意点も含まれています。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

update-branding

概要

CRM のロゴやタイトルを変更します。ロゴは2つのテーマで5つの画面(デスクトップ + モバイルヘッダー、ログイン、サインアップ、確認ページ)に表示され、タイトルは3箇所にハードコードされているため、単一ファイルの編集では古いバージョンが残ってしまいます。以下の手順ですべてをカバーします。 終了条件: ロゴが両方のテーマで5つの画面すべてに正しく表示され、タイトルがヘッダー、ブラウザタブ、PWA 名で一貫していること。

使用するタイミング

  • ユーザーが CRM のロゴやタイトル/名称を変更、交換、またはリブランドしたい場合。
  • オプションで、ファビコンや PWA アプリアイコンの更新も依頼された場合。

テーマカラーやコンポーネントのスタイル変更には使用しません。その場合は Skill({skill: "shadcn-customization"}) を参照してください。

ロゴ: 2つのアセットファミリー

ユーザーがどちらを意味しているかを確認します — ほとんどのリクエストは #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)。後述を参照。

コードのデフォルト vs. ランタイム設定 — 競合します

  • コードのデフォルト(このスキル): 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)、そして個別のライト/ダークバリアントがあるか、それとも1つの画像かを尋ねます。
    • 1つのバリアント → 両方の設定キーにそれを設定します。1つのテーマでコントラストが低くなる可能性があることを警告します(認証ページは常にダークモードキーを使用します)。
    • 単一塗りつぶしの 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 の先頭にある2つの import 文を更新します(これらは defaultDarkModeLogo / defaultLightModeLogo に供給されます。モジュール相対パスなので "./logos/<file>" とします)。これらを単なる公開パス文字列に戻さないでください — 問題 #291 が再発します。
  3. タイトルを更新します(名前が変更された場合)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 をレンダリングします。

合理化

合理化現実
「ロゴファイルを変更した、それで仕事は完了だ。」ロゴは2つのテーマで5つの画面に表示され、タイトルは3つのファイルにあります。1回の編集では古いバリアントが残ります。
「コードの変更が視覚的に反映されないので、適用されなかった。」/settings ストアがブラウザごとに defaultConfiguration.ts を隠蔽します。CRM.app.configuration localStorage キーをクリアしてください。
「1つの画像で両方のテーマに十分だ。」認証ページは常にダークモードキーを使用します。単一のアセットでは、一方の背景で正しく表示されません。警告するか、2つ目のバリアントを派生させてください。
「ファビコンのサイズをいくつか再生成するだけでいい。」PWA セットは34個の PNG です。1つのソースからすべてのサイズを再生成するか、ユーザーにセットを依頼してください。一部だけ手動編集しないでください。

レッドフラグ

  • ロゴの2つのアセットキーのうち1つだけを編集する、またはライト/ダークファイルを入れ替える。
  • defaultConfiguration.ts でタイトルを変更したが、index.html と manifest.json を変更しない。
  • コードの変更が視覚的に反映されないのに、CRM.app.configuration ストアをクリアしない。
  • ファビコン/PWA サイズの一部を手動編集し、完全なセットを再生成しない。
  • 要求されていないのにドキュメントサイトのロゴ(doc/)を変更する。

確認

make typecheck は設定キーのタイプミスのみを検出します。その後 make start して確認: ヘッダーを両方のテーマで、デスクトップ + モバイルで。ログイン/サインアップページ(暗い背景)。タイトルが変更された場合は、ヘッダーの <h1>、ブラウザタブ、PWA 名。ロゴが1つのテーマだけで間違っている場合は、両方のキーが1つのアセットを指しているか、ライト/ダークファイルが入れ替わっています。

  • 両方のロゴバリアントが正しいライト/ダークアセットを指している(表示モードで命名、色ではない)。
  • ロゴが両方のテーマ、デスクトップ + モバイル、およびログイン/サインアップ/確認ページで表示される。
  • 名前が変更された場合、タイトルが defaultConfiguration.ts、index.html、manifest.json で更新されている。
  • 視覚効果がない場合、CRM.app.configuration localStorage キーがクリアされている。
  • ファビコン/PWA アイコンは、明示的に要求された場合にのみ完全なセットとして再生成されている。

Favicon & app icons(オプション)

要求された場合のみ。index.html + public/manifest.json で参照: public/favicon.ico と public/appIcon/*.png(maskable_icon* を含む34サイズ)。1つの正方形のソースからすべてのサイズを再生成するか(sharp / pwa-asset-generator)、ユーザーにセットを依頼してください — 一部だけ手動編集しないでください。最初に範囲を確認してください。manifest.json の theme_color/background_color も更新が必要な場合があります。

ドキュメントサイトのロゴ(doc/astro.config.mjs → doc/public/logo_atomic_crm_*.svg)は別の Astro サイトです — 要求されなければそのままにしてください。

関連スキル