| name | business-dna |
| description | Synthex brand DNA extractor. NEVER produce surface-level brand descriptions ("professional and friendly"), generic persona archetypes ("busy professional aged 25–45"), or tone descriptions that could apply to any brand. ALWAYS extract vocabulary the brand actually uses, describe what the brand explicitly is NOT, and ground the audience in a specific outcome they are seeking. Activate on ANY request to extract brand identity, build a DNA profile, define a brand voice, analyse a website for brand signals, or create a persona profile. |
| metadata | {"author":"synthex","version":"1.0","engine":"synthex-ai-agency","type":"capability-uplift-content","triggers":["scan website","brand DNA","brand profile","extract brand","analyse my brand","business identity","brand kit","pomelli","brand identity","brand voice","persona","dna","website analysis"]} |
| context | fork |
Business DNA — Brand Profile Extraction
Purpose
Scans a business website and builds a structured Brand DNA profile. This profile powers
every downstream skill: campaign generation, visual briefs, consistency checks, and
campaign planning. Inspired by Google Labs Pomelli — but outputs to Synthex workflows
including scheduling, analytics, and BYOK-powered content generation.
Workflow
1. Collect URL from user
2. Run website analysis via lib/ai/website-analyzer.ts
3. Extract Business DNA (see schema below)
4. Display profile for user review and override
5. Persist to brand profile (if user confirms)
6. Offer next steps: campaign, visual brief, or planner
Business DNA Schema
interface BusinessDNA {
brandName: string;
tagline?: string;
industry: string;
location?: string;
targetAudience: string;
audiencePainPoints: string[];
toneOfVoice: string[];
vocabulary: string[];
avoidWords: string[];
languageStyle: 'formal' | 'casual' | 'technical' | 'conversational';
primaryColour: string;
secondaryColours: string[];
typography: string;
imageStyle: string;
logoDescription?: string;
usp: string;
keyBenefits: string[];
differentiators: string[];
socialProof?: string;
activePlatforms: string[];
contentThemes: string[];
}
Extraction via Website Analyzer
File: lib/ai/website-analyzer.ts
Two-tier scraping: Firecrawl (primary) → native fetch fallback.
import { analyzeWebsite } from '@/lib/ai/website-analyzer';
const result = await analyzeWebsite(url, businessName);
Map analyzer output to BusinessDNA schema — supplement with AI inference for
missing fields (colours, typography) by requesting the user's brand kit or
analysing visible design elements described in the scrape.
User Override Mode
After extraction, ALWAYS display the DNA profile and invite corrections:
Here's your Business DNA — review and tell me anything that needs adjusting:
BRAND: [name]
INDUSTRY: [industry]
USP: [usp]
TONE: [tone array joined with ", "]
PRIMARY COLOUR: [hex]
TARGET AUDIENCE: [audience]
KEY BENEFITS: [benefits as bullet list]
CONTENT THEMES: [themes]
→ Type "looks good" to lock this in, or tell me what to change.
Storing to Synthex Brand Profile
When confirmed, the DNA maps to Synthex's brand profile system:
- Brand name, USP, audience →
lib/brand-dna/extractor.ts
- Tone + vocabulary → Persona creation via
POST /api/personas
- Colours + visual style →
app/dashboard/settings/brand-profile
After DNA is Locked
Offer the user next steps:
Your Business DNA is locked in. What would you like to do next?
1. Generate a social media campaign → brand-campaign-generator skill
2. Create a visual content brief → visual-content-brief skill
3. Plan your content calendar → campaign-planner skill
4. Check existing content for brand → brand-consistency-checker skill
Common Issues
| Issue | Fix |
|---|
| Site blocks scraping | Ask user to paste homepage text or upload brand kit |
| Colours not detected | Ask user to provide hex codes from their logo/website |
| Tone unclear | Ask 3 quick questions: "formal or casual?", "educational or inspiring?", "local or national?" |
| Missing audience | Ask: "Who is your ideal customer in one sentence?" |
Capability Uplift — Override Defaults
NEVER describe a brand's tone as "professional and friendly" (every brand
says this), produce a target audience as "busy professionals aged 25–45" (too
generic to act on), or write brand values that sound like an MBA mission
statement ("we deliver excellence through innovation").
INSTEAD a high-quality Business DNA extraction includes:
- Vocabulary the brand actually uses — specific words and phrases pulled
verbatim from their website/materials, not inferred generics
- What the brand is NOT — explicit exclusions are as valuable as inclusions
("never corporate-speak", "never aspirational fluff", "never discounts")
- Audience defined by outcome — not demographics, but what they're seeking:
- ✗ "Women aged 30–45 interested in wellness"
- ✓ "Mums who want to lose the baby weight without giving up wine on Friday"
- Voice on a spectrum — position on 3 axes:
- Formal ←→ Casual
- Serious ←→ Playful
- Broad ←→ Niche
REFERENCE .claude/skills/synthex-standards/references/content-standards.md
Foundation & Gate Wiring (SYN-1049)
Adopted from the senior-skill standard so every artefact this connector produces is checked against the locked foundation before it lands.
Reads at every invocation (never cached — re-read each run):
.claude/memory/ceo-foundation.md — voice tag (Q2.5.5), brand-specific taboos (Phase 3.X), audience-evidence base.
.claude/memory/verification-gates.md — gate state for any claim referenced.
Output gate: every client-facing artefact this connector produces routes through brand-voice-enforce before the CEO batched-review queue. A REJECT blocks the artefact until the quoted offending string is fixed.
Evidence standard: every quantitative or factual claim carries exactly one tag — [VERIFIED] / [INFERENCE] / [UNCONFIRMED]. Untagged = defect (.claude/rules/fabel-evidence-standard.md). Never state a projected result as fact.
Spec: see spec.md in this skill directory.