brand-identity
Brand identity sets from one brief - logo, typography and colour palette built together, measured (contrast, colour blindness, glyph coverage, font licences, small-size logo renders) and compared side by side as identity cards, shown on the user's own site, then a brand guidelines kit (PDF, logo files, tokens) for the chosen set. Use for a new brand or any part of one (logo, fonts, colours, or a mix), for refreshing an identity, or for critiquing one, even if the user only says "branding".
Install
npx skills add https://github.com/fatihaydost/brand-identity-skill --skill brand-identityType
Choosing, pairing and checking a set's faces. Tags: [strong] [limited] [practice] [popular-unsupported].
Selection
- Display does voice, text does reading. People attribute consistent personas to faces
(Brumberger 2003, Technical Communication 50:2); fitting the persona
matters in ads, legibility elsewhere (Shaikh, Chaparro & Fox 2006, Usability News 8:1).
[limited] - Class → voice (grotesk honest, neo-grotesk neutral, geometric modern, humanist warm, old-style literary, Didone
dramatic and fragile when small, slab sturdy, mono technical) is vocabulary, culture-bound
(Google Fonts checklist).
[practice] - Holds up: round ↔ sweet, angular ↔ sour across countries (Velasco et al. 2015)
[strong]; its effect on taste or sales is mixed[limited]. No "most legible font": speed varies by reader (Wallace et al. 2022)[strong]; serif vs sans makes no difference once x-height is matched (Arditi & Cho 2005)[strong]. Humanist sans reads better at a glance at small sizes (Dobres et al. 2016).[limited]"Hard-to-read fonts are remembered" failed replication (Taylor et al. 2020).[popular-unsupported] - Work from constraints first: languages, smallest and largest size, weights, licence, web budget; then set the
real brand name and a real sentence in candidates, never Lorem
(Type Founders).
[practice] - Before picking, run the reflex test (
ai-defaults.md).brand.py fonts search --exclude-defaultshides listed faces.
Pairing modes (identitylib.PAIRING_MODES; give sets different modes)
A second face only if it does what the first cannot (GF, superfamily);
mixing is optional and low contrast can work (Butterick). [practice]
Rule only where measurable: one family per role, every family has a role. For inline mixing keep x/cap ratios
close (CSS font-size-adjust); no threshold is evidenced.
Checks (brand.py fonts audit FAMILY --langs … --numbers)
- Gate: 100% of base exemplars of every brief language (gflanguages;
tr→tr_Latn). Missing ğ ş İ fall back letter by letter. - Gate: licence known and covers logo outline, web, app, PDF embed.
- Gate:
tnumwhen the product shows numbers. - Warn: text family with < 2 real weights (a
wghtaxis spanning 400–700 counts); I/l/1 raster IoU > 0.9 (heuristic; suggest anss/cvdisambiguation feature); high stroke contrast in the text role. - Info: GF Latin Core coverage,
locl, total web weight. - Casing is the browser's job: set
langso Turkishiuppercases toİ, and only there.
Licences and rendering
Competitor type map
brand.py site competitors WORK URL…reads heading/body families.- Classify each (catalogue class, or "custom/commercial" by eye; CSS names can be aliases like
sohne-var). - Grid: class × role, cells = competitor count. Crowded cell = category code; empty cell = room to differ. Leaders often use their own or commercial faces (Wise Sans, Söhne, Monzo Sans; our 6-site sample); an OFL set differs by class, family and features. Inter is ~1% of the whole web (Web Almanac 2024); its ubiquity is a startup and AI-output effect. Show a face in real use with Fonts In Use links, one at a time, no bulk scraping.