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
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.
- 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:
responseSchemaon Gemini,response_format: json_schemaon 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) andlocalhost:11434(Ollama).
![]() Input form |
![]() Generating the report |
![]() Business Overview |
![]() Domain map |
![]() Technologies |
![]() Next Steps |
![]() History |
![]() Configuring Gemini |
- Node.js 20 or later.
- pnpm 10 or later.
pnpm install
pnpm devThen open http://localhost:3000.
There is no backend. All credentials and history are kept locally in the browser.
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:1234andlocalhost:11434transparently, so requests duringpnpm devare not subject to CORS. A production build, however, must have CORS enabled on the origin server.
| 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 |
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 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,generatedAtandsource. - 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
mermaidentity-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.
pnpm testThe 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.
- React 19 and Vite 6 on TypeScript.
- Tailwind CSS 3 with
tailwindcss-animate. @google/genaifor Gemini, loaded via dynamic import so it is not shipped in the initial bundle.- Native
fetchwith an OpenAI-compatible body for local servers. - Vitest for tests, ESLint and Prettier for code quality.
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.
Mozilla Public License Version 2.0
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.
- 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:
responseSchemano Gemini,response_format: json_schemanos 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) elocalhost:11434(Ollama).
![]() Formulário |
![]() Gerando relatório |
![]() Visão do negócio |
![]() Mapa de domínio |
![]() Tecnologia |
![]() Próximos Passos |
![]() Histórico |
![]() Configuração do Gemini |
- Node.js 20 ou superior.
- pnpm 10 ou superior.
pnpm install
pnpm devEm seguida, abra http://localhost:3000.
Não há backend. Todas as credenciais e o histórico ficam no navegador.
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:1234elocalhost:11434, portanto o CORS não afeta o fluxo empnpm dev. Já um build de produção exige CORS habilitado no servidor de origem.
| 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 |
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
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,generatedAtesource. - 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
mermaidgerado 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.
pnpm testO 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.
- React 19 e Vite 6 sobre TypeScript.
- Tailwind CSS 3 com
tailwindcss-animate. @google/genaipara o Gemini, carregado via import dinâmico para ficar fora do bundle inicial.fetchnativo com corpo compatível com a API OpenAI para servidores locais.- Vitest para testes, ESLint e Prettier para qualidade de código.
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 Pública Mozilla Versão 2.0







