home / skills / phrazzld / claude-config / brand-builder

brand-builder skill

/skills/brand-builder

This skill helps establish a project's brand identity by guiding interactive discovery to generate a brand-profile.yaml for consistent future content.

npx playbooks add skill phrazzld/claude-config --skill brand-builder

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
5.3 KB
---
name: brand-builder
description: |
  Interactive brand discovery for a project. Creates brand-profile.yaml
  that guides all future content generation.

  Run once per project to establish voice, audience, topics.
argument-hint: "[project-name]"
---

# /brand-builder

Establish brand identity. Generate content that fits.

## What This Does

Interactive discovery process that creates a `brand-profile.yaml` in the project root.
This profile guides `/post` and `/announce` skills to generate on-brand content.

## Process

### Phase 1: Discovery (Interactive)

Ask the user questions using `AskUserQuestion`:

**1. Target Audience**
```
Who is the primary user of [product]?
- Developers / technical users
- General consumers
- Business / enterprise
- Specific niche (describe)
```

**2. Tone & Voice**
```
What tone should [product] use?
- Professional & authoritative
- Casual & friendly
- Playful & fun
- Technical & precise
```

**3. Core Value Proposition**
```
In one sentence, what does [product] do for users?
(User provides free text)
```

**4. Content Topics**
```
What topics are relevant to [product]'s audience? (Select multiple)
- Product updates & features
- Industry news & trends
- Tips & tutorials
- Behind-the-scenes / building in public
- User stories & testimonials
- General interest in the domain
```

**5. Competitors / Inspirations**
```
What brands or products inspire [product]'s voice?
(User provides free text - optional)
```

### Phase 2: Context Gathering (Automatic)

Gather additional context without user input:

**Git History Analysis**
```bash
# Recent commits to understand what's being built
git log --oneline -20

# Key features from README
cat README.md | head -100

# Tech stack from package.json / Cargo.toml / etc.
cat package.json 2>/dev/null | jq '{name, description, keywords}'
```

**Existing Marketing Materials**
- Check for existing `brand-profile.yaml`
- Look for marketing copy in README, landing page
- Note any existing social presence

### Phase 3: Profile Generation

Generate `brand-profile.yaml` combining user input and gathered context:

```yaml
# Brand Profile for [Product Name]
# Generated by /brand-builder on [date]
# Used by /post and /announce for content generation

product:
  name: Volume
  domain: volume.app
  tagline: "Track your lifts. See your gains."
  category: health

audience:
  primary: "Gym-goers who want to track strength training progress"
  demographics:
    - Age 25-45
    - Fitness enthusiasts
    - Data-driven
  pain_points:
    - Hard to remember what weight to use
    - Can't see progress over time
    - Existing apps are too complex

voice:
  tone: casual_friendly
  personality:
    - Encouraging but not preachy
    - Data-focused without being nerdy
    - Celebrates small wins
  avoid:
    - Bro culture / toxic fitness
    - Overly technical jargon
    - Shaming language

content:
  mix:
    product_updates: 30%
    valuable_content: 70%

  topics:
    # Product-related (30%)
    - New features and improvements
    - Tips for using the app
    - User milestones

    # Domain-related (70%)
    - Strength training tips
    - Form and technique
    - Progress tracking psychology
    - Motivation and consistency
    - Gym culture and community

  hashtags:
    primary:
      - "#fitness"
      - "#strengthtraining"
      - "#gymlife"
    product:
      - "#volumeapp"
      - "#trackyourlifts"

  posting_frequency: "2-3 times per week"

inspirations:
  - "Strong app - clean and focused"
  - "Strava - community without being overwhelming"

twitter_account: "@MistyStepLLC"  # From products.yaml category

# Generated context
context:
  tech_stack: "Next.js, TypeScript, Convex"
  recent_features:
    - "Interval timer"
    - "Exercise library"
    - "Progress charts"
  github_repo: "MistyStep/volume"
```

### Phase 4: Save & Confirm

Save to project root as `brand-profile.yaml`.

Confirm with user:
```
Brand profile created for [Product].

Summary:
- Audience: [primary audience]
- Tone: [tone]
- Content mix: 30% product / 70% valuable content
- Topics: [list top 3]

Saved to: ./brand-profile.yaml

Run /post [product] to generate content using this profile.
```

## Usage

```bash
# In a project directory
/brand-builder

# Or specify project name
/brand-builder volume
```

## Output

Creates `brand-profile.yaml` in:
1. Current directory (if in a project)
2. Or `~/.claude/skills/brand-builder/profiles/[product].yaml` as fallback

## Integration

Other skills use this profile:
- `/post` - Reads profile for voice, topics, hashtags
- `/announce` - Uses profile for launch messaging
- `/social-content` - Generates content calendar from topics

## Re-running

If `brand-profile.yaml` already exists:
1. Load existing profile
2. Ask if user wants to update specific sections
3. Preserve unchanged sections
4. Update modified sections

## Example Session

```
> /brand-builder

I'll help establish a brand identity for this project.
Let me gather some context first...

[Reads README, package.json, git history]

Found: "Volume" - a fitness tracking app

Question 1 of 5: Who is your primary user?
[AskUserQuestion with options]

...

Brand profile created!

Summary:
- Audience: Gym-goers tracking strength progress
- Tone: Casual & encouraging
- Topics: Strength training, progress tracking, gym tips

Saved to: ./brand-profile.yaml

Next: Run /post volume "shipped interval timer" to generate a launch post.
```

Overview

This skill runs an interactive brand discovery flow and produces a single source of truth: brand-profile.yaml. It captures audience, tone, topics, content mix, and contextual project signals to guide all future content generation. Run it once per project to lock in voice and reuse across post, announce, and social-content workflows.

How this skill works

The skill asks a short set of guided questions about target audience, tone, value proposition, topics, and inspirations. It then analyzes project context automatically (recent git commits, README, package metadata, existing profiles) and merges inputs into a structured brand-profile.yaml. The profile is saved in the project root or a fallback profiles directory and can be re-run to update specific sections without losing unchanged data.

When to use it

  • Onboard a new product or repo to establish consistent voice and audience
  • Before running content-generation skills like post, announce, or social-content
  • When shifting the product positioning, tone, or content strategy
  • To document brand decisions so contributors and writers stay aligned
  • When auditing existing messaging to identify gaps or inconsistencies

Best practices

  • Run the interactive flow with a product owner or writer who knows target users
  • Keep answers concise and concrete; examples or competitor names help calibrate voice
  • Allow the automatic context scan to run so tech and marketing signals are captured
  • Re-run only the sections that have changed to preserve historical voice choices
  • Store the generated brand-profile.yaml in version control alongside the project

Example use cases

  • Create a brand profile for a new app so social posts and launch copy match tone
  • Generate on-brand product announcement posts using the saved profile
  • Build a weekly content calendar from the profile's topic mix and hashtags
  • Align multiple contributors by sharing the single brand-profile.yaml
  • Refresh messaging ahead of a major pivot by updating the profile interactively

FAQ

Where is the profile saved?

It saves to the project root as brand-profile.yaml, and falls back to a local skills profiles directory if no project root is detected.

Can I update only part of the profile?

Yes. On re-run the skill loads the existing profile and lets you change specific sections while preserving unchanged fields.