Skip to content

AI-powered business naming engine with real-time domain availability, iterative brainstorming, and persona-driven creative profiles.

License

Notifications You must be signed in to change notification settings

jeremynsl/localnamer

Repository files navigation

LocalNamer

An intelligent project/business name generator that helps you create, refine, and validate business names with real-time domain availability checking.

Features

  • Intelligent Name Generation: AI-powered business name creation using LLMs via LiteLLM (Gemini, OpenAI, OpenRouter supported) — defaults to free OpenRouter models, no paid LLM subscription or API required
  • Creative Profiles: Generate names with unique creative personas, angles, and constraints
  • Iterative Refinement: Select your favorite names and generate new variations based on your preferences
  • Free Domain Checking: Check availability across 12 popular TLD extensions (.com, .net, .org, .io, etc.) via DNS and RDAP — no paid domain API (GoDaddy, Namecheap, etc.) required
  • Competitive Analysis: Analyze potential naming conflicts with existing businesses (requires Brave Search API key — optional, rest of app works without it)
  • Favorites Management: Save and organize your preferred names with notes
  • Live AI Reasoning: Watch the AI's thought process in real-time during generation

Quick Start

Installation

# Clone the repository
git clone https://github.com/jeremynsl/localnamer.git
cd localnamer

# Install dependencies
pip install -r requirements.txt

Environment Setup

Create a .env file with your API keys:

# Required for name generation (defaults to free OpenRouter models)
OPENROUTER_API_KEY=your_openrouter_api_key

# Optional: only needed for the Analyze (competitive conflict) feature
BRAVE_API_KEY=your_brave_search_api_key

# Optional: only if you want to use OpenAI models instead of OpenRouter
OPENAI_API_KEY=your_openai_api_key
# Optional: only if you want to use Gemini models instead of OpenRouter
GEMINI_API_KEY=your_gemini_api_key

# Optional: Server configuration (defaults shown)
# SERVER_HOST=127.0.0.1  # Binds to localhost only (secure default)
# SERVER_PORT=8000        # Default port
# ALLOW_REMOTE_ACCESS=false  # Keep false for local-only mode

Security Note: This app is local-only by default. Non-loopback clients are blocked unless you explicitly set ALLOW_REMOTE_ACCESS=true.

Running the Application

# Start the server (binds to localhost:8000 by default)
python -m app.main

# Alternative: Run with uvicorn directly (recommended)
uvicorn app.main:app --host 127.0.0.1 --port 8000

# Optional: bind externally only if you intentionally want remote access
uvicorn app.main:app --host 0.0.0.0 --port 8000
# and set ALLOW_REMOTE_ACCESS=true

The application will be available at http://localhost:8000

How It Works

Standard Mode

  1. Input: Enter your business idea and any suggested names
  2. Generate: AI creates relevant business names with domain availability
  3. Select: Choose names you like using checkboxes
  4. Iterate: Generate new names inspired by your selections
  5. Refine: Repeat the process to continuously improve results
  6. Competitive Analysis: Analyze potential naming conflicts with existing businesses

Creative Mode

  1. Profile Creation: Generate unique creative briefs with personas and constraints
  2. Creative Generation: AI creates names following the creative direction
  3. Profile Management: Reuse successful creative profiles from your recent history
  4. Selective Components: Enable/disable specific parts of creative profiles

API Endpoints

Name Generation

  • POST /check_names - Generate initial business names
  • POST /iterate_names - Generate names based on selections
  • POST /creative_names - Generate names using creative profiles
  • POST /check_tld - Check a specific additional TLD on demand

Creative Profiles

  • POST /generate_brief - Create new creative profiles
  • GET /recent_profiles - Get recently used profiles

Favorites & Analysis

  • POST /analyze_names - Detailed competitive analysis
  • GET /user/favorite-names - Manage saved names
  • POST /user/favorite-names - Save favorite names

Real-time Features

  • POST /check_names_stream - Stream AI reasoning during generation
  • POST /creative_names_stream - Stream creative generation process
  • POST /iterate_names_stream - Stream iteration process

Architecture

Frontend (Static Files)
├── Interactive name cards with domain status
├── Creative profile management
├── Real-time AI thoughts streaming
└── Favorites management

Backend (FastAPI)
├── app/ - Main application and configuration
├── routers/ - API endpoint definitions
├── services/ - Business logic and LLM integration
├── models/ - Data validation and types
└── Static SQLite database for persistence

Key Technologies

  • Backend: FastAPI, Python 3.10+
  • AI Integration: Multiple LLM providers via LiteLLM
  • Domain Checking: DNS + RDAP with intelligent caching
  • Search: Brave Search API for competitive analysis
  • Database: SQLite for local data persistence
  • Frontend: Vanilla JavaScript with Tailwind CSS

Configuration

LLM Models

  • Standard Generation: DeepSeek R1 (high creativity, thinking)
  • Creative Briefs: gpt-oss-120b (fast)
  • Competitive Analysis: DeepSeek R1 (high creativity, thinking)
  • Temperature: Optimized for creative naming (1.0-1.1)
  • Model Selection: Defaults to free OpenRouter models, can be configured for OpenAI or Gemini via environment variables

Domain Checking

  • Supported TLDs: .com, .net, .org, .io, .co, .ai, .biz, .info, .app, .dev, .ca, .uk
  • Performance: DNS-first optimization with RDAP fallback
  • Caching: 1-hour TTL to speed up iterations

Development

Project Structure

localnamer/
├── app/                 # FastAPI application
│   ├── main.py         # Entry point
│   ├── settings.py     # Configuration
│   └── database.py     # SQLite operations
├── routers/            # API routes
├── services/           # Business logic
├── models/             # Data models
├── static/             # Frontend files
└── tests/              # Test suite

Running Tests

# Run all tests
python -m pytest

# Run specific test files
python -m pytest tests/test_main.py -v
python -m pytest tests/test_creative_profiles.py -v

Database Schema

The application uses SQLite with tables for:

  • creative_profiles - Saved creative personas and constraints
  • favorite_names - User's favorite generated names with metadata

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Support

For issues and feature requests, please create an issue.