Start / Projekte / Namegen

Building Namegen: A Quality-First Brand Naming Pipeline on the Site

A naming tool that starts from the problem being solved, shortlists names worth building around, and checks domains and trademarks, without hosting anyone's LLM bill.

Status Im Produktivbetrieb · on-site (Nitro/TS)
UmfangInteractive shortlists · 12 to 24 names per run · BYOK AI optional
KerntechnologienNuxt 4 · Nitro · TypeScript · better-sqlite3 · RDAP · YAML lexicons · BYOK LLM (Anthropic / OpenAI / xAI / Gemini)
01

Überblick

A brand naming system for companies, apps, podcasts, nonprofits, communities, and personal brands. The user names what they are naming and what problem they solve; the system generates candidates, scores them, radio-tests them, checks domains and conflicts, screens trademarks, and returns a shortlist, not a dump of syllable soup.

Was gebaut wurde

A full naming pipeline with two generation modes. Local mode runs deterministic generators driven by curated YAML lexicons and naming philosophies. BYOK mode uses the visitor's own AI provider key, for that request only; when AI is on, every name comes from the provider, with no local filler. Production ships inside this site at /apps/namegen with a Nitro API behind it. The original Python application remains the open-source reference and the self-host path.

Für wen es ist

Founders, operators, and creators who need a shortlist of ownable names before they buy a domain or file a mark, not a thesaurus of product descriptions.

Geschäftlicher Kontext

Naming tools usually fail in one of two ways: they emit soft invented sludge, or they pretend host-paid AI is free. Namegen's job was to raise the quality bar with hard gates, keep AI optional and user-funded, and avoid a second deploy and subdomain for the live product.

02

Architektur

A stepped client orchestrates a server pipeline. Generation is one stage; domains, conflicts, and trademarks are separate stages, so the UI can show honest progress and survive partial failure.

ClientVue composer + results table
Edge APINitro routes under /api/namegen
Briefentity + problem → category, keywords, tone
one run row, stepped stages
Generatorlocal strategies or BYOK LLM, exclusive
Quality gatesfilter → soft-invented ban → brand quality → scorer
Checksradio → RDAP domains → conflict → trademark
StoreSQLite runs + candidates + favorite signals

Why stepped stages and hard invariants

Generation and checks are separate endpoints against one run row, so the client can step through them and a slow RDAP pass or a failed trademark stage degrades to a partial result instead of a spinner that lies. Two invariants bind the whole pipeline: when BYOK is enabled the run is AI-only, so a weak provider response fails loudly as ai_failed rather than being padded with local filler; and API keys travel only as session-scoped request headers, never into the database or the logs.

03

Komponenten

The system is built from nine components. Each is documented the same way: why it exists, how it is built, what constrains it, and what it trades away.

C1Brief composer & entity contextclient-facing
Warum sie existiert
A software company and a local furniture retailer should never get the same kind of names. What you are naming is the primary brand-context signal, so the entity picker leads the form.
Architektur
An entity picker with fourteen types plus a problem textarea; optional brand preferences (philosophy, language, audience, liked brands, avoid list) and an advanced drawer (length, count, TLDs, BYOK). The server normalizes entity, style, and language, then infers category, keywords, and tone into a composed brand brief.
Einschränkungen
Entity and problem are required. Entity rules drive max length, spaces, and how the LLM prompt is framed. Preferences must change the output, not just decorate the brief.
Randfälle
Legacy aliases normalize (brandable becomes invented, market codes become languages). An empty problem with only a brand brief still composes. A custom Other language passes through.
Trade-offs
Progressive disclosure keeps the first action one click; more control lives behind drawers so the composer stays a single composition.
C2Naming philosophiesgeneration strategy
Warum sie existiert
One algorithm with a style slider collapses to the same invented names. Philosophies are distinct strategies, not weights on one method.
Architektur
Four philosophies: Invented (Figma and Canva energy), Real Words (Stripe, Cursor, Ramp), Compound (Basecamp, Mailchimp, GitHub), and Descriptive (SurveyMonkey and PayPal, still ownable). Style quotas drive the local generator; LLM prompts are opinionated per philosophy, with positive and negative examples, hard avoid lists, and liked-brand patterns rather than the brands themselves.
Einschränkungen
Real-word candidates must pass curated lexicon checks. Soft inventeds are banned on the AI path. Entity rules can override length and spacing.
Randfälle
An AI asked for inventeds that returns product phrases gets culled by the gates. A compound that is not two recognizable halves fails the accept rules.
Trade-offs
Stricter philosophies mean fewer names. Preferred over a long list of sludge.
C3Generation pipelinecore
Warum sie existiert
Orchestrates create, generate, and checks as a status machine the UI can step through honestly.
Architektur
Load the favorite-signal and preference profiles; run local generation or the LLM, exclusively; filter every name, ban soft inventeds, apply avoid tokens, and score with a tier bonus for the provider's own top picks; cull to a shortlist of 12 to 24; radio-test the top names; persist candidates with safe LLM metadata only, provider, model, and counts, never keys.
API-Vertrag
// stepped UI path: one run row, separate stages
POST /api/namegen/runs                 { run_pipeline: false }
POST /api/namegen/runs/:id/generate    + X-LLM-* headers
POST /api/namegen/runs/:id/check-domains · check-conflicts · check-trademarks
GET  /api/namegen/runs/:id             → results DTO
Randfälle
Provider JSON that will not parse returns ai_failed, with no silent fallback. A quality cull that would empty the set falls back to keeping the best of what passed the structural filter. Favorites can be toggled while a run is open.
Trade-offs
Stepped calls cost more round trips than a one-shot pipeline, and buy honest progress and partial recovery.
C4Local name generatorlexicon engine
Warum sie existiert
A usable product with AI off: free, deterministic, offline-capable generation.
Architektur
Six methods (descriptive, compound, invented, evocative, suggestive, real word) driven by curated YAML assets: a vocabulary, a brand lexicon, a real-word lexicon, and syllable tables. Language preferences bend phonotactics and endings.
Einschränkungen
Must respect entity max length and philosophy quotas, and must never emit blocklisted or unpronounceable strings.
Randfälle
Exhausted lexicon uniqueness, over-long compounds, and category stems that turn descriptive mode into SEO sludge.
Trade-offs
Curated lexicons beat open-ended invented generation for commercial feel, and they bound creativity to what is in the lists.
C5BYOK LLM layersecurity + creative
Warum sie existiert
Optional AI lift without the host paying inference or storing user keys.
Architektur
The key lives in sessionStorage and travels only as request headers on the generate call. The server prefers the request key; host keys are honored only when a private-deploy flag is set, and the public default is off. Providers: Anthropic, OpenAI-compatible, xAI, and Gemini. The prompt asks for structured JSON, naming directions plus names with tiers, and the AI target is capped per run.
Einschränkungen
Public deploys carry no server keys. Keys never touch query strings, logs, or the database. AI on means no local filler.
Randfälle
A key with no provider, an invalid model override, provider rate limits, malformed JSON, and the batch where every AI name fails the gates.
Trade-offs
Ephemeral headers are simple and honest: the key exists for that tab session, by design, and there is no multi-user key vault to secure.
C6Quality gatesfilter · scorer
Warum sie existiert
The product is a shortlist, not a brainstorm dump. Soft inventeds fail the commercial test: would you say we use this at work every day?
Architektur
Four gates in series. A structural filter checks length, blocklist, consonant clusters, and syllable limits. A soft-invented ban holds a banned set, product endings like ify and bot, and soft Latinate tails, with a small classical whitelist. A brand-quality check applies method-specific accept rules. A weighted scorer applies philosophy overrides, preference penalties and bonuses, and a favorite-affinity bonus.
Einschränkungen
Gates run on both the local and AI paths. Credibility floors are stricter for the invented and real-word styles.
Randfälle
Odd but good coinages can be over-rejected; real adverbs that happen to end in ly; multi-word names that need higher syllable limits.
Trade-offs
Aggressive bans improve first-impression quality and discard some creative edges. The right trade for a founder-facing shortlist.
C7Radio, domains, conflict, trademarkschecks
Warum sie existiert
A pretty name that fails spelling, the dot-com check, or a famous mark is not a shortlist candidate.
Architektur
Radio is a heuristic spell-after-hearing score with alternate spellings and an explanation. Domains use RDAP only, which is free, with capped concurrency and a week-long cache. Conflict is a deterministic blocklist over exact matches and brand stems. Trademark screening runs exact, spelling, and phonetic matching with Nice-class weighting from the brief, and reads out as low, medium, or high risk. The default dataset is a labeled sample; a real USPTO import is an operator option.
Randfälle
RDAP timeouts surface as an error status rather than a fake available. Premium domain hints, dead versus live marks, and same-industry versus unrelated classes.
Trade-offs
Free RDAP and a labeled sample dataset keep the public tool zero-cost. Every check is informational: it is a filter, never registrar truth and never legal advice.
C8Persistence & favorite learningstore
Warum sie existiert
Sessions, export, and soft learning from starring, without a heavy data platform.
Architektur
SQLite via better-sqlite3: a runs table (brief, settings, status), candidates (scores, domains, conflict, radio, trademark, favorite), a domain cache, and favorite signals that store only anonymized name shape, length, ending, and style, feeding an affinity bonus on later runs.
Einschränkungen
No API keys in the database, ever. The hosting filesystem is ephemeral without a volume, so runs do not survive deploys unless the database path points at persistent storage.
Randfälle
Uniqueness per run and name, migration columns for the radio and trademark fields, and favorite-toggle races.
Trade-offs
SQLite is enough for a personal-site tool; multi-instance hosting would need an external store and a shared rate limit.
C9On-site Nitro port & open-source splitplatform
Warum sie existiert
The planned names subdomain never got DNS, and BYOK removed the cost reason to stay separate. The real barrier was stack isolation, Python versus Nuxt, and a TypeScript port dissolved it.
Architektur
A faithful port of the Python services into Nitro server utilities plus a Vue UI at /apps/namegen, with the YAML lexicons shipped as server assets. The apps shelf launches the on-site route; View Source points at the public Python repository, which stays the MIT reference and self-host path.
Trade-offs
Dual maintenance of a TypeScript production app and a Python reference, against one deploy and one domain. On-site TypeScript won for production UX and operations.
04

Visuelles Ergebnis

The exhibits this record will carry, captured from the live tool. Every frame below is a slot awaiting a real screenshot; nothing here is mocked.

The composer

Entity, problem, and one Generate action; preferences stay collapsed until asked for.

Screenshot slot · composer at rest

C1 · Brief composer

Naming philosophy control

Invented, Real Words, Compound, Descriptive, each with its hint copy.

Screenshot slot · philosophy segmented control

C2 · Naming philosophies

BYOK advanced drawer

AI on, provider selected, key field, and the status chip.

Screenshot slot · BYOK drawer with AI on

C5 · BYOK LLM layer

Progress states

Generating, then checking domains, conflicts, and trademarks, as separate honest stages.

Screenshot slot · stepped progress

C3 · Generation pipeline

Direction cards and results table

Favorites, source badges for AI and Local, scores, domain pills, trademark risk, and radio.

Screenshot slot · results table

C6 · Quality gates

Usable-only filter and CSV export

The shortlist posture: cut to what survives, then take it with you.

Screenshot slot · filter + export

C7 · Checks

Sample trademark disclaimer

The honesty line: the demo dataset is a sample, not a USPTO search.

Screenshot slot · trademark disclaimer

C7 · Checks

05

Wirkung

What the system changed, by audience.

Geschäft
  • A public naming utility ships on the personal site with no second SaaS bill for inference.
  • The reference implementation is open source under MIT while production runs on-site.
Kunde
  • A problem-first brief instead of describe your startup.
  • Philosophies that actually change the shape of the names.
  • Domains and trademark risk on the same shortlist view.
Betrieb
  • One deploy with the site and no orphan subdomain.
  • BYOK means abuse cost is mostly CPU and RDAP calls, not API spend.
Engineering
  • Hard quality gates as product behavior, not prompt hope.
  • An AI-only invariant whenever BYOK is enabled.
  • A clear split between the live TypeScript app and the Python reference.
Umfang
  • Shortlists are intentionally small, 12 to 24 names per run.
  • The API is rate limited per IP and RDAP concurrency is capped.
06

Technische Dokumente

Documents this record seeds. Each becomes a dated entry as it is written.

07

Fallstudie

The complete arc, compressed.

Problem
Founders drown in bad name generators: keyword piles, soft inventeds, and tools that hide an API meter behind the word free.
Ziel
A shortlist of names worth building around, shaped by what you are naming and the problem you solve, with domain and trademark context and optional AI the host does not pay for.
Einschränkungen
No host LLM keys on the public deploy; deterministic quality gates; a free domain path via RDAP; trademark screening that never pretends to be legal clearance; and no dependency on an unpublished subdomain.
Ansatz
A problem-and-entity brief, philosophy-specific generation, local or BYOK, hard quality gates, then radio, domain, conflict, and trademark checks into one comparison table. Later, port the Python engine to Nitro and TypeScript and host it on-site.
Architektur
Vue client, Nitro API, a stepped pipeline over SQLite and YAML lexicons; keys live only in the session and in request headers.
Trade-offs
Aggressive soft-invented rejection, AI-only generation when enabled, a sample trademark dataset by default, a dual codebase, and ephemeral SQLite without a volume.
Ergebnis
The pipeline runs in production at /apps/namegen. The apps shelf launches it in-site, the MIT Python repository remains the reference and self-host path, and the dead subdomain plan is retired.
Lektionen
  • Quality is a gate stack, not a better prompt.
  • Free AI on a public tool is a cost center and an abuse magnet; BYOK is the product decision.
  • A second deploy for DNS aesthetics is not free; if the site can host it, host it.
  • When AI is on, do not dilute failure with local filler.
Zukunft
A persistent volume or external database so runs survive deploys, a documented USPTO dataset path for operators, and either shared fixtures that keep the Python and TypeScript engines aligned or a formal freeze of Python as the reference.
← Alle Projekte