Update Branding logo

Update Branding

OrganizationPopular
marmelab
update-branding

Rebrand Atomic CRM — change the application logo (the wordmark in the header and on the login/signup pages) and/or the title/name. Use when the user wants to change, swap, update, or rebrand the CRM logo or title. Handles the two light/dark-mode logo variants, the three places the title is hardcoded, the config that points at them, and — optionally — the browser favicon and PWA app icons.

Overview

Publishermarmelab
Repositoryatomic-crm
Skill nameupdate-branding
Stars
1.4K
Forks
860
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by marmelab on GitHub. Read the source before you install it.

Installation

Install the Update Branding AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/marmelab/atomic-crm/tree/main/.claude/skills/update-branding
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/marmelab/atomic-crm.git /tmp/atomic-crm
mkdir -p .claude/skills
cp -r /tmp/atomic-crm/.claude/skills/update-branding .claude/skills/update-branding
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Update Branding in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Update Branding on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Update Branding is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

update-branding

Overview

Changes the CRM logo and/or title. The logo shows in two themes across five screens (desktop + mobile header, login, signup, confirmation) and the title is hardcoded in three places a naive single-file edit leaves one stale. The steps below catch all of them. Exit criterion: the logo renders correctly in both themes across all five screens, and the title is consistent in the header, browser tab, and PWA name.

When to Use

  • The user wants to change, swap, or rebrand the CRM logo and/or title/name.
  • Optionally, when they also ask to update the favicon or PWA app icons.

Not for theme colors or component styling see Skill({skill: "shadcn-customization"}).

Logo: two asset families

Confirm which the user means — most requests mean only #1.

  1. App logo / wordmark (common) — src/components/atomic-crm/root/logos/, imported as module assets by defaultConfiguration.ts (Vite resolves the URL relative to the JS chunk, so it survives nested routes like /oauth/consent and sub-path deploys). logo_atomic_crm_dark.svg is light-colored art shown in dark mode + all auth pages; logo_atomic_crm_light.svg is dark-colored art shown in light mode. (A standalone unused logo_atomic_crm.svg still lives in public/logos/.)

    Files are named by the mode they display in, not their color — the "dark-mode" logo must read on a dark background.

  2. Favicon + PWA icons — only if asked. Much bigger (34 PNGs); see below.

Code defaults vs. runtime Settings — they conflict

  • Code defaults (this skill): edit defaultConfiguration.ts + assets. Committed, applies everywhere, and the only way to change the browser-tab title / favicon / PWA icons.
  • Settings UI (/settings → Branding, SettingsPage.tsx): a logged-in user edits title + uploads logos, per-browser, saved to localStorage as CRM.app.configuration (logos as base64), never committed. Covers only the in-app logo + header title.

⚠️ The store shadows the code. useConfigurationContext returns { ...defaultConfiguration, ...storedConfig } (ConfigurationContext.tsx). If branding was ever saved via /settings, your edits to defaultConfiguration.ts won't show in that browser — clear the CRM.app.configuration localStorage key. Suspect this whenever a code change has no visual effect.

Steps

  1. Gather the asset(s). Ask for the file/URL, format (SVG vs PNG), and whether there are separate light/dark variants or one image.
    • One variant → set both config keys to it; warn about poor contrast in one theme (auth pages always use the dark-mode key).
    • Single-fill SVG → derive the other variant by swapping the fill (white ↔ black).
  2. Place the files in src/components/atomic-crm/root/logos/:
    • Drop-in (simplest): overwrite logo_atomic_crm_dark.svg / logo_atomic_crm_light.svg, keeping the exact filenames + .svg. The imports in defaultConfiguration.ts already point here — done. (SVG only.)
    • New name / format (e.g. PNG): save as new files next to them, then update the two import statements at the top of defaultConfiguration.ts (they feed defaultDarkModeLogo / defaultLightModeLogo; module-relative paths, so "./logos/<file>"). Do not revert them to bare public-path strings — that reintroduces issue #291.
  3. Update the title (if the name changes) in all three places — defaultTitle drives only the first:
    • defaultConfiguration.ts → defaultTitle — header <h1> + logo alt.
    • index.html → <title> — browser-tab title (hardcoded, not set at runtime).
    • public/manifest.json → short_name + name — installed-PWA name.

Consumers (no edits if you keep the config keys): layout/Header.tsx + dashboard/MobileDashboard.tsx render both variants (CSS-toggled, h-6); login/{LoginPage,SignupPage,ConfirmationRequired}.tsx render only darkModeLogo.

Rationalizations

RationalizationReality
"I changed the logo file, that's the whole job."The logo shows in two themes across five screens and the title lives in three files. One edit leaves a stale variant.
"My code change has no visual effect, so it didn't apply."The /settings store shadows defaultConfiguration.ts per browser. Clear the CRM.app.configuration localStorage key.
"One image is fine for both themes."The auth pages always use the dark-mode key; a single asset reads wrong on one background. Warn or derive the second variant.
"I'll regenerate a couple of favicon sizes."The PWA set is 34 PNGs. Regenerate every size from one source or ask for the set don't hand-edit a few.

Red Flags

  • Editing only one of the two logo asset keys, or swapping the light/dark files.
  • Changing the title in defaultConfiguration.ts but not index.html and manifest.json.
  • A code change with no visible effect, with the CRM.app.configuration store left uncleared.
  • Hand-editing a subset of favicon/PWA sizes instead of regenerating the full set.
  • Touching the docs-site logo (doc/) when it wasn't requested.

Verification

make typecheck catches only config-key typos. Then make start and check: header in both themes, desktop + mobile; the login/signup pages (dark bg); and if the title changed, the header <h1>, browser tab, and PWA name. A logo wrong in exactly one theme means both keys point at one asset, or the light/dark files are swapped.

  • Both logo variants point at the correct light/dark assets (named by display mode, not color).
  • Logo renders in both themes, desktop + mobile, and on login/signup/confirmation.
  • If the name changed, the title is updated in defaultConfiguration.ts, index.html, and manifest.json.
  • If no visual effect appears, the CRM.app.configuration localStorage key was cleared.
  • Favicon/PWA icons regenerated as a full set only if explicitly requested.

Favicon & app icons (optional)

Only if asked. Referenced by index.html + public/manifest.json: public/favicon.ico and public/appIcon/*.png (34 sizes incl. maskable_icon*). Regenerate every size from one square source (sharp / pwa-asset-generator) or ask the user for the set — don't hand-edit a few. Confirm scope first; theme_color/background_color in manifest.json may also need updating.

The docs-site logo (doc/astro.config.mjs → doc/public/logo_atomic_crm_*.svg) is a separate Astro site — leave it unless asked.

Frequently asked questions

What does the Update Branding AI skill do?

Rebrand Atomic CRM — change the application logo (the wordmark in the header and on the login/signup pages) and/or the title/name. Use when the user wants to change, swap, update, or rebrand the CRM logo or title. Handles the two light/dark-mode logo variants, the three places the title is hardcoded, the config that points at them, and — optionally — the browser favicon and PWA app icons.

Why use Update Branding on TypingMind?

Because you install it once and use it with any model. Update Branding is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Update Branding in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/marmelab/atomic-crm/tree/main/.claude/skills/update-branding. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Update Branding?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Update Branding?

As many as you like. As long as a model supports skills, you can use Update Branding with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Update Branding AI skill free?

Yes. It is published on GitHub by marmelab under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇