Brand Score (naming)
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.
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:/amer.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 0L-pinky … 7R-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, foFó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, rwPron = 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` | L→L (não) | de ✓ (−0.4) |
| 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óduloprodutoserviç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:/amer.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:/amer.koder.dev
- Inspiração de typability: Carpalx (Krzywinski, 2005)
§Idiomas — scoring multi-idioma (en-US default + pt-BR)
O Brand score é dependente de idioma: Typability é por layout de teclado (QWERTY/ABNT2…) e Pronunciability + Sonority são por fonotática da língua. A API é analyze(text, layout, lang) com lang default en-US (American English). Implementado em tools/namer/site/script.js (registro LANGS).
Perfil pt-BR (Português Brasileiro)
- Vogais:
a e i o u(ynão é vogal em pt). - Coda final válida: um único
s/r/l/m/n/z. Cluster final (ex.:kiln→
-ln,wright→-ght) é ilegal em pt → penalidade forte; consoante final fora do conjunto também penaliza. *(É o que o brand-score inglês não vê:kilné Pron 100 em inglês mas difícil pra um brasileiro.)* - Onsets:
C+{l,r}são nativos →kl/krnão penalizam (o inglêspenaliza
klcomo bigram raro). Onsets fora do conjunto pt (ex.:st,sp,skiniciais — epentéticos em pt) penalizam. - Bigrams estrangeiros (thshckghwrkndj…) penalizam.
R-LANG — Política de naming da Koder Stack (normativa)
A Koder Stack é desenvolvida por um cidadão brasileiro e será usada internacionalmente. Logo, ao sugerir/avaliar nome de qualquer componente:
- en-US é condição NECESSÁRIA — o nome deve ter Brand bom (≥ 60, Good+)
em
en-US. Ruim em inglês → descartar, sem segunda chance. - pt-BR é obrigatório como segundo filtro — passando no en-US, rodar também
lang=pt-BR. Ruim em pt-BR → descartar também. - Só entra na leva o nome bom nos DOIS idiomas.
Fluxo (qualquer IA): analyze(nome, layout, 'en-US') → se ruim, descarta; senão analyze(nome, layout, 'pt-BR') → só banca se ambos forem Good+. A name-batch-presentation.kmd herda esta regra (gerar = checar os dois idiomas).