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

Rocketseat

Rocketseat

5 min de leitura
https://prod-files-secure.s3.us-west-2.amazonaws.com/08f749ff-d06d-49a8-a488-9846e081b224/41e72ffc-37da-432f-b739-3217ba2b2b44/testes-com-ia.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466SHINDIPV%2F20260512%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260512T124004Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEGQaCXVzLXdlc3QtMiJFMEMCHzNe5aH0k4fss%2B1hXy4Ib2i4dYK9StBFecNLPcEf%2B5QCIEwTtjJve6yvN7Et2RX2tl49I5XpQAi5yzzJCa0gqh8dKv8DCC0QABoMNjM3NDIzMTgzODA1IgyLVuuqqQBZqgb8BEQq3AMTH76nEIpvQkGT%2FTc8CUbHGq%2FWaSHkpKriSZvGuUBXmo4Yz0GXkVYC4hVRjK4QTriBhjadwUBzJi8ITGg0AqntiGGA6rnWDgKwLhoPcWcKpKfY9x%2BIYaJx1qt2ODyIEyJml1iNgL93pyVvJSY5w5UbAkFAaJ5rtzJ4u0WM1imOfAryAA6%2B3UzgRA29syLmBc7UAJ01P3AEliqEjpYNdFBul0OVshOB0YnzTqAm2psYGPJIwKsa0tpIjfmBQORXzy6fiGUswY%2F4xNECiI4LsFricrgnqeH05uybAtMZQtlgojDO0pQ7xXky0jh%2Feahr9mc6btH7vrchRBXgjmGNgM24i2w8i4ik8e1PIaGh%2Fi4WjtmWrydjkUL%2B9VTl42H0gvy2vn25LOTQ%2FBPmOEaIpo3ULs3Wxx1rIJQendiTpN8%2Fng2CBIbTzE1j3zDAV1gueG819r%2FxW75a5hIrd8thBj9qnboArKTTYkS%2Bbp6UYmtAmqVIno2f0FwIv%2B0oyVBlzO9qcbXPas7DJGGERDaIVnnwY9b9%2BKZJYKLngq4fi%2FLRfIoH2NpWZmzjI8aLSGRSOHMV77L1ki185WMr3UrBn69VkDEbdLo3hyudDm%2BmmzL9%2BWWA0TarqRpahZHg3jDQrYzQBjqnAWi5PmAbsfxp3ZF8RX3a7s7kWfuo5U2lgwvVfZHIg%2FMLuG26iwHw6ZU0XP7PIFKxFZ0DGyXKuYDfWWVDTY1Vs3Hnoj6UTRF6QYyRH2IXcaeHXtztvLa1b23xiKN6k11iwllJgHk6TX019d4TBrJnQc3v3uiAj2%2BbtPrXOeoo8vaxjhUWFQYIeqpfdzO0d3H1lkLypJq1F%2F6nPSgJFkRGHkV3mwg3u1Ol&X-Amz-Signature=f4ef82d27d627e5f8f4936b278c0c20e54fb03ab1cc30f8289ead96eaddb073c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
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.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente