Como montar um contexto de projeto para a IA não te dar respostas genéricas

Rocketseat
Conheça o Rocketseat Para Empresas
Oferecemos soluções personalizadas para empresas de todos os portes.
A IA é tão boa quanto as informações que você fornece a ela. Se você simplesmente digita "faça um componente de login", ela vai retornar algo genérico, sem considerar sua arquitetura, padrões de código ou necessidades específicas do projeto. O resultado é código que não encaixa, decisões arquiteturais equivocadas e tempo perdido em refatorações desnecessárias.
A solução está em montar um contexto robusto que guie a IA como se ela fosse um membro experiente da sua equipe. Ferramentas como o Cursor AI transformaram a forma como desenvolvedores trabalham com IA justamente porque permitem contextualizar o projeto inteiro. Neste artigo, você vai aprender a estruturar esse contexto de forma estratégica.
Entendendo o poder do contexto
Quando você configura um bom contexto, a IA para de adivinhar e começa a entender. Ela analisa sua estrutura de pastas, padrões de código, dependências e requisitos específicos para gerar respostas que fazem sentido dentro do seu ecossistema.
Um contexto bem montado reduz drasticamente o tempo de revisão de código. Em vez de receber uma solução genérica e ter que adaptá-la ao seu caso, a IA já entrega algo que segue suas convenções, arquitetura e padrões de qualidade. É como fazer pair programming com alguém que já conhece profundamente o seu projeto.
A diferença é significativa: com contexto, a IA poupa horas de trabalho. Sem ele, você gasta esse tempo em ajustes constantes.
System prompts: o alicerce do contexto
Um system prompt é a instrução fundamental que orienta a IA durante toda a conversa. No Cursor AI, você pode defini-lo na configuração do workspace. Um bom system prompt deve incluir as seguintes informações.
Stack tecnológico
Detalhe exatamente quais tecnologias você usa. Evite ser vago e especifique versões quando isso for relevante.
Framework: Next.js 14 com App Router Linguagem: TypeScript (strict mode) Styling: Tailwind CSS v3.3 State: Zustand para gerenciamento global Testing: Vitest + React Testing Library Node.js: 18+
Padrões e convenções do projeto
Defina como o código deve ser estruturado. Inclua exemplos reais de nomenclatura para arquivos, componentes e funções.
// ✅ Componentes: PascalCase (exemplo) export function UserProfile() { return <div>User Profile</div>; } // ✅ Hooks customizados: camelCase com prefixo 'use' export function useAuthForm() { const [email, setEmail] = useState(''); return { email, setEmail }; } // ✅ Funções utilitárias: camelCase export function formatCurrency(value: number): string { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL', }).format(value); } // ✅ Tipos: arquivo .types.ts // types/user.types.ts export interface User { id: string; email: string; name: string; } // ✅ Testes: co-locados com sufixo .test.ts // UserProfile.test.ts import { render, screen } from '@testing-library/react'; import { UserProfile } from './UserProfile'; describe('UserProfile', () => { it('should render user profile', () => { render(<UserProfile />); expect(screen.getByText(/User Profile/i)).toBeInTheDocument(); }); });
Requisitos não funcionais
Qualidade, performance, segurança e escalabilidade importam. Deixe claro quais são suas prioridades.
- Acessibilidade: WCAG 2.1 AA obrigatório
- Performance: Lighthouse score acima de 90
- Segurança: validação em cliente e servidor
- SEO: meta tags dinâmicas em todas as páginas
Workspace instructions: a visão 360 do projeto
As workspace instructions operam em um nível acima do system prompt. Enquanto o system prompt foca em como o código deve ser escrito, as workspace instructions definem o que o projeto faz, sua arquitetura geral e os contextos específicos de domínio.
Estrutura e arquitetura
Documente como as pastas estão organizadas. A IA usa essa informação para entender dependências e identificar padrões ao longo do projeto.
/apps /web # Aplicação Next.js principal /admin # Painel administrativo /packages /ui # Componentes compartilhados /api-client # Cliente HTTP centralizado /utils # Funções utilitárias comuns /types # Tipos TypeScript compartilhados /docs /context # Documentação de contexto
Modelos de domínio
Se o projeto segue Domain Driven Design (DDD) ou outra arquitetura, descreva os domínios principais e como eles se relacionam entre si.
// User Domain interface User { id: string; email: string; role: 'customer' | 'admin'; } // Product Domain interface Product { id: string; name: string; price: number; inventory: number; } // Order Domain interface Order { id: string; userId: string; items: OrderItem[]; status: 'pending' | 'processing' | 'shipped' | 'delivered'; total: number; } interface OrderItem { productId: string; quantity: number; price: number; } // Payment Domain interface Payment { id: string; orderId: string; provider: 'stripe' | 'paypal'; status: 'pending' | 'completed' | 'failed'; amount: number; }
Exemplo prático: montando um contexto de verdade
Considere que você está criando uma plataforma de e-commerce. Veja como seria o contexto completo configurado nas workspace instructions:
Stack
Frontend: - Next.js 14 (App Router) - React 18 - TypeScript 5 Backend: - Node.js/Express - API RESTful Database: - PostgreSQL - Prisma ORM Styling: - Tailwind CSS - shadcn/ui State Management: - Zustand (client state) - React Query (server state) Authentication: - NextAuth.js com JWT
Arquitetura
Monorepo com Turborepo Separação clara entre /apps/web, /apps/api e /packages DDD com contextos delimitados (User, Product, Order, Payment)
Padrões de código
// ✅ Exemplo de componente reutilizável 'use client'; import { ComponentPropsWithoutRef } from 'react'; import { cn } from '@/packages/utils'; interface ButtonProps extends ComponentPropsWithoutRef<'button'> { variant?: 'primary' | 'secondary'; size?: 'sm' | 'md' | 'lg'; } export function Button({ variant = 'primary', size = 'md', className, ...props }: ButtonProps) { return ( <button className={cn( 'font-medium rounded transition-colors', variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700', variant === 'secondary' && 'bg-gray-200 text-gray-900 hover:bg-gray-300', size === 'sm' && 'px-3 py-1 text-sm', size === 'md' && 'px-4 py-2 text-base', size === 'lg' && 'px-6 py-3 text-lg', className )} {...props} /> ); } // ✅ Exemplo de hook com lógica de domínio import { useCallback, useState } from 'react'; import { useQuery, useMutation } from '@tanstack/react-query'; import { apiClient } from '@/packages/api-client'; import type { Order } from '@/packages/types'; export function useOrders() { const [error, setError] = useState<string | null>(null); const { data: orders, isLoading } = useQuery({ queryKey: ['orders'], queryFn: async () => { const response = await apiClient.get('/orders'); return response.data as Order[]; }, }); const createOrderMutation = useMutation({ mutationFn: async (orderData: Omit<Order, 'id'>) => { return apiClient.post('/orders', orderData); }, onError: (err: any) => { setError(err.message); }, }); return { orders, isLoading, createOrder: createOrderMutation.mutate, error }; } // ✅ Exemplo de teste import { renderHook, waitFor } from '@testing-library/react'; import { useOrders } from './useOrders'; describe('useOrders', () => { it('should fetch orders', async () => { const { result } = renderHook(() => useOrders()); await waitFor(() => { expect(result.current.isLoading).toBe(false); }); expect(result.current.orders).toBeDefined(); }); });
Requisitos críticos
Performance: - Pré-renderização da landing page - Images otimizadas com next/image - Code splitting automático Conversão: - Checkout em menos de 3 cliques - Formulários com validação em tempo real - Feedback visual imediato Segurança: - CSRF protection - Validação de inputs (zod/yup) - Rate limiting em APIs SEO: - Metadata dinâmica - Structured data (JSON-LD) - Sitemap.xml gerado automaticamente
Onde colocar seu contexto
No Cursor AI: use a pasta
.cursor na raiz do projeto com arquivos .md descrevendo o contexto. Você também pode adicionar regras diretamente na documentação do projeto.Em um arquivo dedicado: algumas equipes criam um
CONTEXT.md na raiz do repositório, referenciado em todas as conversas com a IA.Exemplo de CONTEXT.md:
# Contexto do Projeto ## Stack - Next.js 14, React 18, TypeScript 5 - Zustand + React Query - Tailwind CSS + shadcn/ui - Vitest + RTL ## Convenções - Componentes: PascalCase - Hooks: useXXX em camelCase - Tipos: arquivo .types.ts - Testes: co-locados com .test.ts ## Padrões - DDD com contextos delimitados - Componentes sem lógica de negócio - Hooks para toda lógica stateful - Mínimo 80% de cobertura de testes
No
.cursorignore: defina o que a IA não precisa analisar.node_modules/ .next/ dist/ build/ *.log .env.local .DS_Store
Testando seu contexto
Faça uma pergunta simples, mas específica: "Crie um componente de botão seguindo os padrões deste projeto". Se a resposta incluir:
- Uso de Tailwind CSS com
cn()utility
- TypeScript com tipos Props
- Suporte a variantes (primary/secondary)
- Padrões do projeto (PascalCase, estrutura esperada)
- Exemplo de uso correto
Então o contexto está funcionando. Se a resposta for genérica, volte e refine as instruções.
Puxe a IA para dentro do seu universo
Montar um bom contexto é um investimento que gera retorno rápido. A IA passa a ser um colaborador real, não um gerador de boilerplate genérico. Ela entende o seu projeto, segue suas convenções e acelera o desenvolvimento de forma consistente.
Quer aprender engenharia de prompt em profundidade e dominar como trabalhar com IA no dia a dia? Confira a masterclass de engenharia de prompt da Rocketseat, onde você descobre técnicas avançadas para extrair o máximo de ferramentas como Cursor AI, GPT e outras plataformas de IA.
Conheça o Rocketseat Para Empresas
Oferecemos soluções personalizadas para empresas de todos os portes.
Artigos_
Explore conteúdos relacionados
Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.
NewsletterReceba conteúdos inéditos e novidades gratuitamente
.png&w=640&q=75)