Brand Score (naming)

naming specs/naming/brand-score.kmd

Fórmula do Brand score (Type/Pron/Son/Mem), bandas de rating, checklist de aplicação e alvos por categoria. Implementado em `tools/namer` (https://namer.koder.dev). Este spec é a fonte normativa da lógica.

Quando esta spec se aplica

Todos os triggers

Corpo da especificação

Regra: Cálculo do Score BRAND para Nomes de Módulos Koder

Usar este spec sempre que for necessário sugerir, avaliar ou comparar nomes de módulos, produtos, serviços ou APIs Koder. O modelo é o mesmo implementado em tools/namer (https://namer.koder.dev) — este arquivo é a fonte normativa da lógica.

Visão geral

O Brand score é um número 0–100 (maior = melhor) que combina 4 dimensões, todas também 0–100 no mesmo sentido:

Dimensão Peso O que mede
Type (typability) 35% Ergonomia de digitação em QWERTY
Pron (pronunciability) 30% Wellformedness fonotática em inglês
Son (sonority) 20% Subida/descida silábica limpa
Mem (memorability) 15% Comprimento, ritmo CV, repetição

Cada dimensão é calculada primeiro como penalty (0 = perfeito, cresce com violações) e depois convertida pra 0–100 via função exponencial suavizada.

Fórmula de conversão (penalty → score 0–100)

score100 = round(100 · e^(-k · penalty_per_letter))

Onde penalty_per_letter = penalty_total / número_de_letras_mapeadas e k é uma constante por dimensão, calibrada pra nomes curtos de marca:

Dimensão k
Type 0.65
Pron 1.20
Son 1.50
Mem 2.00

Composição final:

Brand = round(0.35·Type + 0.30·Pron + 0.20·Son + 0.15·Mem)

Bandas de rating

Faixa Label
90–100 Excellent
75–89 Great
60–74 Good
40–59 Fair
0–39 Poor

Dimensão 1 — Typability (k = 0.65)

Modelo inspirado no Carpalx, calibrado pra nomes curtos de marca.

Custos por tecla (QWERTY US)

Row cost: home = 0 · upper = 1 · lower = 1.5 Finger cost (índices 0=L-pinky … 7=R-pinky):

[2, 1, 0.5, 0, 0, 0.5, 1, 2]

Cada letra soma row_cost[row] + finger_cost[finger] no base_effort.

Modificadores por par de letras consecutivas

1. Same-finger bigram (SFB) — duas letras no mesmo dedo:

  • Penalty: 2 · max(1, |row_a − row_b|)
  • Exemplos:
    • de (ambos L-middle, home→upper, rowDist=1) → +2
    • my (ambos R-index, home→upper, rowDist=1) → +2
    • br (ambos L-index, lower→upper, rowDist=2) → +4

2. Hand alternation bonus — letras em mãos diferentes: −0.5 por transição.

3. Common bigram bonus — pares na lista curada de ~50 bigrams mais comuns do inglês: −0.4 por ocorrência. Lista:

th, he, in, er, an, re, on, at, en, nd, ti, es, or, te,
of, ed, is, it, al, ar, st, to, nt, ng, se, ha, as, ou,
io, le, ve, co, me, de, hi, ri, ro, ic, ne, ea, be, di,
li, ra, sa, ma, ta, el, la, si, ch, no, fo

Fórmula

type_penalty = base_effort
             + Σ(SFB_penalty)
             − 0.5 · alternations
             − 0.4 · common_bigrams_hits

Type = round(100 · e^(-0.65 · type_penalty / letters))

Dimensão 2 — Pronunciability (k = 1.20)

Wellformedness fonotática em inglês.

Vogais (inclui y): a, e, i, o, u, y. Todo o resto é consoante.

Penalidades

Critério Penalty
Nenhuma vogal na palavra 2 · N (N = letras)
Consonant run de 3 +2
Consonant run de 4 +4
Consonant run de 5+ 6 + 2·(N−4)
Cada bigram raro na lista curada +2
Hard onset (≥3 consoantes iniciais) +1
Hard coda (≥3 consoantes finais) +1

Lista curada de bigrams raros (~55 pares awkward em inglês)

pf, mk, gb, kp, pk, td, dt, kt, tk, fk, kf, vk, kv,
bw, wb, gw, wg, pz, zp, dq, qd, xk, kx, qp, pq, zk, kz,
hj, jh, rj, jr, vn, nv, vm, mv, mj, jm, bm, mb, dg, gd,
lk, kl, sr, rs, fn, nf, pn, zh, fm, mf, zr, rz, wr, rw
Pron = round(100 · e^(-1.20 · pron_penalty / letters))

Dimensão 3 — Sonority (k = 1.50)

Sequenciamento silábico limpo. Ideal: consoantes separando vogais (CV, CV, CV).

Penalidades

Critério Penalty
Consonant cluster (par CC adjacente) +1
Vowel hiatus (par VV adjacente) +0.5
Son = round(100 · e^(-1.50 · son_penalty / letters))

Dimensão 4 — Memorability (k = 2.00)

Penalidades e bônus

Critério Delta
Comprimento ideal (4–8 letras) 0
Muito curto (N < 4) +1.5 · (4 − N)
Muito longo (N > 8) +1.2 · (N − 8)
CV alternation (fração p de pares adjacentes que alternam C↔V) +2 · (1 − p)
Bônus de repetição (fração r de letras repetidas) −min(1.5·r, 0.8)
mem_penalty = max(0, Σ deltas)
Mem = round(100 · e^(-2.00 · mem_penalty / letters))

Exemplo trabalhado: koder

Type

Tecla Row Finger Cost
k home (0) R-middle (5) 0.5
o upper (1) R-ring (6) 2.0
d home (0) L-middle (2) 0.5
e upper (1) L-middle (2) 1.5
r upper (1) L-index (3) 1.0

base_effort = 5.5

Pares consecutivos:

Par Mesmo dedo? SFB penalty Alt? Common bigram?
k→o não 0 R→R (não) não
o→d não 0 R→L ✓ não
d→e L-middle ✓ `2·max(1, 0−1 ) = +2`
e→r não 0 L→L (não) er ✓ (−0.4)
type_penalty = 5.5 + 2 − 0.5·1 − 0.4 − 0.4 = 6.2
type_per    = 6.2 / 5 = 1.24
Type        = round(100 · e^(-0.65·1.24))
            = round(100 · 0.447)
            = 45  (Fair)

Pron

Tem vogais (o, e). Nenhum run consonantal ≥ 3. Nenhum bigram raro. Sem hard onset/coda.

pron_penalty = 0 → Pron = 100  (Excellent)

Son

Todos os 4 pares adjacentes alternam C/V (ko, od, de, er). Zero clusters CC ou VV.

son_penalty = 0 → Son = 100  (Excellent)

Mem

  • Length 5 (ideal 4–8) → 0
  • CV alternation: 4/4 = 100% → (1−1)·2 = 0
  • Repetição: 5 letras únicas, repetition = 0 → 0
mem_penalty = 0 → Mem = 100  (Excellent)

Brand

Brand = round(0.35·45 + 0.30·100 + 0.20·100 + 0.15·100)
      = round(15.75 + 30 + 20 + 15)
      = round(80.75)
      = 81  (Great)

koder → Brand 81 (Great).


Checklist pra aplicar no naming de módulos Koder

Quando precisar sugerir nomes pra um novo módulo/produto/serviço:

  1. Gere 5–10 candidatos livremente, capturando o conceito do produto. Não filtre na hora da geração.
  2. Rode os scores — mentalmente (regras acima) ou via https://namer.koder.dev/?word=nome1,nome2,nome3.
  3. Filtros rígidos (descartar imediatamente):
    • Brand < 50
    • Pron < 60 (difícil de pronunciar é difícil de viralizar)
    • Qualquer SFB com rowDist ≥ 2 em nome de ≤ 6 letras (impacto proporcional alto)
    • Length < 3 ou > 10 (fora da faixa confortável de marca)
  4. Ranqueie os sobreviventes por Brand desc.
  5. Filtros manuais (não-quantificáveis):
    • Colisão com marca existente conhecida (Google, Amazon, OpenAI, etc.)
    • Semântica ruim ou ofensiva em inglês, português, espanhol
    • Quebra a coerência da família Koder (nome muito distante do tom dos módulos vizinhos)
    • Domínio .dev ou .com já registrado por terceiros (checar antes de apresentar)
  6. Apresente o top 3 ao usuário com o Brand score de cada um, em formato: koder-<nome> (Brand XX · <rating>).

Alvos por tipo de módulo

Tipo de módulo Brand mínimo
Produto flagship B2C (apps/, sites públicos) 75+ (Great)
Engine / plataforma B2B (platform/, core/) 60+ (Good)
Infra interna, SDK, ferramenta de dev (infra/, sdk/, tools/) 50+ (Fair)
Nome de código provisório (sandbox, scratch) 40+ (Fair)

Referência

Referências