Skip to content

Repository files navigation

DomainExpert

A domain specification generator that turns a short business description into a Domain-Driven Design report, exported as Markdown to be consumed by another AI agent as a PRD.

English version · Versão em português


English

Overview

DomainExpert takes a small set of inputs describing a business domain — objective, personas, main interactions, technical constraints — and asks a Large Language Model to produce a complete Domain-Driven Design specification: user stories, entities, value objects, aggregates, domain services, domain events, external integrations and a prioritized roadmap.

The result is rendered in a tabbed interface and can be exported as JSON or as a structured Markdown document. The Markdown export is the main product of this application: it is formatted to be read by a second AI agent (for example, a coding agent) that will use it as a Product Requirements Document.

Capabilities

  • Bring-your-own-key for Google Gemini and support for any OpenAI-compatible local server (LMStudio, Ollama, or similar).
  • Structured output enforced at the API level: responseSchema on Gemini, response_format: json_schema on local servers.
  • Markdown exporter with YAML frontmatter, an instruction block addressed to the consumer agent, a glossary table (ubiquitous language), a Mermaid erDiagram, user stories with stable IDs, events with typed payload, integrations cross-linked to user stories, a priority-sorted roadmap, and a section that carries over the reviewer's per-section comments.
  • Per-section feedback persisted to local history and included in the exported Markdown.
  • Local history in localStorage (up to 50 entries), with open and delete actions.
  • Development CORS proxy for localhost:1234 (LMStudio) and localhost:11434 (Ollama).

Screenshots

Input form
Input form
Generating report
Generating the report
Business Overview
Business Overview
Domain map
Domain map
Technologies
Technologies
Next Steps
Next Steps
History
History
Configuring Gemini
Configuring Gemini

Prerequisites

  • Node.js 20 or later.
  • pnpm 10 or later.

Getting started

pnpm install
pnpm dev

Then open http://localhost:3000.

There is no backend. All credentials and history are kept locally in the browser.

Configuring the AI provider

Open the AI Settings panel in the input form.

Gemini. Obtain a key at https://aistudio.google.com/apikey, paste it in the API key field. The key is persisted in localStorage of the current browser and sent directly to Google.

Local (LMStudio or Ollama). Set the base URL (for example http://localhost:1234/v1 for LMStudio, http://localhost:11434/v1 for Ollama) and the model name. If the URL is given without a path, the application appends /v1 automatically.

Regarding browser CORS:

  • LMStudio: in the application, go to Developer → Local Server → configuration panel, and enable the CORS option. Restart the server.
  • Ollama: start the server with OLLAMA_ORIGINS="*".
  • In development mode the Vite dev server proxies localhost:1234 and localhost:11434 transparently, so requests during pnpm dev are not subject to CORS. A production build, however, must have CORS enabled on the origin server.

Scripts

Script Purpose
pnpm dev Start the Vite development server
pnpm build Build a production bundle to dist/
pnpm preview Serve the production build locally
pnpm typecheck Run tsc --noEmit
pnpm lint Run ESLint
pnpm format Format all files with Prettier
pnpm format:check Verify formatting without writing
pnpm test Run the Vitest suite once
pnpm test:watch Run Vitest in watch mode
pnpm test:update Update Vitest snapshots

Project structure

src/
  App.tsx
  index.tsx
  global.css
  constants.ts
  types.ts
  components/
    ErrorBoundary.tsx
    HistorySidebar.tsx
    InputForm.tsx
    Layout.tsx
    LoadingState.tsx
    ReportDisplay.tsx
    report/
      DomainTab.tsx
      ExportMenu.tsx
      FeedbackPanel.tsx
      shared.tsx
      StepsTab.tsx
      TechTab.tsx
      VisionTab.tsx
  services/
    exportService.ts
    geminiService.ts
    historyService.ts
    settingsService.ts
    __tests__/
      exportService.test.ts
      fixtures.ts

The Markdown export

The exporter, implemented in src/services/exportService.ts, is designed to produce a document that a second AI agent can consume as a PRD. The output contains:

  • YAML frontmatter with domain, version, generatedAt and source.
  • A directive block addressed to the consumer agent, stating that the document is the authoritative PRD and listing constraints such as preserving the ubiquitous language, respecting aggregate boundaries, and following the roadmap order.
  • A glossary table consolidating entities, value objects, aggregates, services and events.
  • A mermaid entity-relationship diagram generated from entities and their relationships.
  • User stories with stable IDs (US-01, US-02, …), acceptance criteria (AC-1, AC-2, …), related domain events and integrations.
  • Domain events with typed payload.
  • Integrations with resilience strategies and back-links to the user stories they serve.
  • A roadmap sorted by priority (high, medium, low).
  • A feedback section that surfaces the reviewer's per-section comments, marked as overrides of any conflicting content above.

Testing

pnpm test

The exporter is covered by snapshot tests and contract tests, located in src/services/__tests__/. Snapshots are stored under src/services/__tests__/__snapshots__/. If the exporter output is intentionally changed, update snapshots with pnpm test:update.

Tech stack

  • React 19 and Vite 6 on TypeScript.
  • Tailwind CSS 3 with tailwindcss-animate.
  • @google/genai for Gemini, loaded via dynamic import so it is not shipped in the initial bundle.
  • Native fetch with an OpenAI-compatible body for local servers.
  • Vitest for tests, ESLint and Prettier for code quality.

Privacy

This application runs entirely in your browser. There is no DomainExpert backend, no analytics, and no telemetry. See PRIVACY.md for details on what is stored, where it is stored and what is transmitted.

License

Mozilla Public License Version 2.0


Português

Visão geral

O DomainExpert recebe um conjunto curto de entradas descrevendo um domínio de negócio — objetivo, personas, interações principais e restrições técnicas — e pede a um modelo de linguagem que produza uma especificação completa de Domain-Driven Design: histórias de usuário, entidades, value objects, agregados, serviços de domínio, eventos de domínio, integrações externas e um roadmap priorizado.

O resultado é apresentado em uma interface por abas e pode ser exportado em JSON ou em um documento Markdown estruturado. A exportação em Markdown é o produto principal desta aplicação: o formato foi pensado para ser lido por uma segunda IA (por exemplo, um agente de código) que o utilizará como Product Requirements Document.

Recursos

  • Uso da chave do próprio usuário para o Google Gemini e suporte a qualquer servidor local compatível com a API OpenAI (LMStudio, Ollama ou equivalente).
  • Saída estruturada garantida na própria API: responseSchema no Gemini, response_format: json_schema nos servidores locais.
  • Exportador de Markdown com frontmatter YAML, bloco de instruções dirigido ao agente consumidor, tabela de glossário (linguagem ubíqua), diagrama Mermaid erDiagram, histórias de usuário com IDs estáveis, eventos com payload tipado, integrações cruzadas com as histórias que atendem, roadmap ordenado por prioridade e seção que transporta os comentários por seção feitos pelo revisor.
  • Comentários por seção persistidos no histórico local e incluídos no Markdown exportado.
  • Histórico local em localStorage (até 50 entradas), com ações de abrir e excluir.
  • Proxy de CORS em desenvolvimento para localhost:1234 (LMStudio) e localhost:11434 (Ollama).

Capturas de tela

Formulário
Formulário
Gerando relatório
Gerando relatório
Visão do negócio
Visão do negócio
Mapa do domínio
Mapa de domínio
Tecnologia
Tecnologia
Próximos Passos
Próximos Passos
Histórico
Histórico
Configuração do Gemini
Configuração do Gemini

Pré-requisitos

  • Node.js 20 ou superior.
  • pnpm 10 ou superior.

Primeiros passos

pnpm install
pnpm dev

Em seguida, abra http://localhost:3000.

Não há backend. Todas as credenciais e o histórico ficam no navegador.

Configurando o provedor de IA

Abra o painel de Configurações de IA no formulário de entrada.

Gemini. Obtenha uma chave em https://aistudio.google.com/apikey e cole-a no campo correspondente. A chave é armazenada no localStorage deste navegador e enviada diretamente ao Google.

Local (LMStudio ou Ollama). Informe a URL base (por exemplo http://localhost:1234/v1 para o LMStudio ou http://localhost:11434/v1 para o Ollama) e o nome do modelo. Se a URL for informada sem caminho, a aplicação acrescenta /v1 automaticamente.

Sobre CORS no navegador:

  • LMStudio: na aplicação, vá até Developer → Local Server → painel de configuração e habilite a opção CORS. Reinicie o servidor.
  • Ollama: inicie o servidor com OLLAMA_ORIGINS="*".
  • Em desenvolvimento, o servidor do Vite faz proxy transparente das chamadas para localhost:1234 e localhost:11434, portanto o CORS não afeta o fluxo em pnpm dev. Já um build de produção exige CORS habilitado no servidor de origem.

Scripts

Script Função
pnpm dev Inicia o servidor de desenvolvimento
pnpm build Gera o bundle de produção em dist/
pnpm preview Serve o bundle de produção localmente
pnpm typecheck Executa tsc --noEmit
pnpm lint Executa o ESLint
pnpm format Formata todos os arquivos com o Prettier
pnpm format:check Verifica a formatação sem escrever
pnpm test Roda a suíte do Vitest uma vez
pnpm test:watch Roda o Vitest em modo observador
pnpm test:update Atualiza os snapshots do Vitest

Estrutura do projeto

src/
  App.tsx
  index.tsx
  global.css
  constants.ts
  types.ts
  components/
    ErrorBoundary.tsx
    HistorySidebar.tsx
    InputForm.tsx
    Layout.tsx
    LoadingState.tsx
    ReportDisplay.tsx
    report/
      DomainTab.tsx
      ExportMenu.tsx
      FeedbackPanel.tsx
      shared.tsx
      StepsTab.tsx
      TechTab.tsx
      VisionTab.tsx
  services/
    exportService.ts
    geminiService.ts
    historyService.ts
    settingsService.ts
    __tests__/
      exportService.test.ts
      fixtures.ts

Sobre a exportação em Markdown

O exportador, em src/services/exportService.ts, foi projetado para produzir um documento consumível por uma segunda IA como PRD. A saída contém:

  • Frontmatter YAML com domain, version, generatedAt e source.
  • Um bloco de instruções dirigido ao agente consumidor, declarando que o documento é o PRD definitivo e listando restrições — preservar a linguagem ubíqua, respeitar as fronteiras dos agregados e seguir a ordem do roadmap.
  • Uma tabela de glossário que consolida entidades, value objects, agregados, serviços e eventos.
  • Um diagrama de entidade-relacionamento mermaid gerado a partir das entidades e de seus relacionamentos.
  • Histórias de usuário com IDs estáveis (US-01, US-02, …), critérios de aceite (AC-1, AC-2, …), eventos e integrações relacionados.
  • Eventos de domínio com payload tipado.
  • Integrações com estratégias de resiliência e retorno às histórias de usuário que atendem.
  • Roadmap ordenado por prioridade (alta, média, baixa).
  • Seção de feedback que expõe os comentários por seção feitos pelo revisor, marcados como sobreposição em caso de conflito com o conteúdo acima.

Testes

pnpm test

O exportador é coberto por testes de snapshot e testes de contrato, em src/services/__tests__/. Os snapshots ficam em src/services/__tests__/__snapshots__/. Quando a saída do exportador for alterada de forma intencional, atualize os snapshots com pnpm test:update.

Stack

  • React 19 e Vite 6 sobre TypeScript.
  • Tailwind CSS 3 com tailwindcss-animate.
  • @google/genai para o Gemini, carregado via import dinâmico para ficar fora do bundle inicial.
  • fetch nativo com corpo compatível com a API OpenAI para servidores locais.
  • Vitest para testes, ESLint e Prettier para qualidade de código.

Privacidade

Esta aplicação é executada inteiramente no navegador. Não há backend do DomainExpert, analytics nem telemetria. Consulte PRIVACY.md para saber o que é armazenado, onde é armazenado e o que é transmitido.

Licença

Licença Pública Mozilla Versão 2.0

About

A tool to help in the creation of domain specification documents.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages