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.
When this spec applies
All triggers
- Sugerir, avaliar ou comparar nomes de módulos, produtos, serviços ou APIs Koder
- Calcular Brand score de candidato a nome
- Definir alvo de score para nova categoria de produto
Specification body
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) → +2my(ambos R-index, home→upper, rowDist=1) → +2br(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:
- Gere 5–10 candidatos livremente, capturando o conceito do produto. Não filtre na hora da geração.
- Rode os scores — mentalmente (regras acima) ou via https://namer.koder.dev/?word=nome1,nome2,nome3.
- 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)
- Ranqueie os sobreviventes por Brand desc.
- 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
.devou.comjá registrado por terceiros (checar antes de apresentar)
- 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
- Implementação canônica:
tools/namer/site/script.js - Ferramenta web interativa: https://namer.koder.dev
- Inspiração de typability: Carpalx (Krzywinski, 2005)
References
tools/namer