Pular para o conteúdo

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ãoPesoO 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ãok
Type0.65
Pron1.20
Son1.50
Mem2.00

Composição final:

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

Bandas de rating

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

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érioPenalty
Nenhuma vogal na palavra2 · 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érioPenalty
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érioDelta
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

TeclaRowFingerCost
khome (0)R-middle (5)0.5
oupper (1)R-ring (6)2.0
dhome (0)L-middle (2)0.5
eupper (1)L-middle (2)1.5
rupper (1)L-index (3)1.0

base_effort = 5.5

Pares consecutivos:

ParMesmo dedo?SFB penaltyAlt?Common bigram?
k→onão0R→R (não)não
o→dnão0R→L ✓não
d→eL-middle ✓`2·max(1,0−1) = +2`
e→rnão0L→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óduloBrand 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