- Responda em português do Brasil, exceto quando o arquivo, API ou pedido estiver em inglês.
- Explique de forma didática quando o contexto for estudo de C++, Git, Linux ou desenvolvimento web.
- Prefira soluções simples, legíveis e fáceis de revisar.
- Antes de refatorações grandes, apresente um plano curto.
- Não faça commit, push, deploy, instalação de dependências ou alteração ampla sem pedido explícito.
Este repositório organiza o projeto C++ de Bolso, um web app/PWA mobile-first para estudar fundamentos de C++ pelo celular.
O app deve funcionar como um treinador de estudos em sessões curtas: explicar conceitos, mostrar exemplos, perguntar, corrigir respostas, salvar progresso e permitir revisão rápida antes de provas.
O conteúdo segue a trilha de estudos baseada no livro C++ Como Programar, de Deitel, e nos materiais locais do projeto, mas o texto do app deve ser original. Use livros, slides e sites apenas como referência de sequência, conceitos e checagem técnica.
- Não copie trechos extensos do livro, PDFs, slides ou páginas externas.
- Não exponha conteúdo de PDFs protegidos ou materiais privados no chat sem autorização explícita.
- Ao usar fontes externas, prefira documentação primária e materiais confiáveis, como cppreference, LearnCpp e documentação oficial das ferramentas.
- Para dúvidas atuais de frameworks, bibliotecas, SDKs, APIs ou CLIs, use Context7 quando disponível.
- Se precisar pesquisar na web, use Firecrawl, Exa, Tavily ou web search quando disponíveis, cite as fontes e escreva conteúdo próprio.
A raiz do projeto guarda materiais de estudo, documentação e planejamento. O app web deve ficar isolado em app/.
.
├── AGENTS.md
├── README.md
├── conversa_cpp_de_bolso.md
├── C++ Como Programar - 5ª Edição.pdf
├── Slides/
├── Labs/
├── docs/
│ ├── PROJECT_STRUCTURE.md
│ └── CONTENT_ROADMAP.md
└── app/
├── README.md
├── public/
│ └── icons/
└── src/
├── app/
├── assets/
├── components/
├── data/
│ ├── lessons/
│ └── quizzes/
├── hooks/
├── pages/
├── styles/
├── types/
└── utils/Não mova os PDFs, slides ou labs sem autorização. A pasta app/ será a base do futuro Vite/React.
Para o MVP, use preferencialmente:
- Vite
- React
- TypeScript
- CSS moderno ou Tailwind CSS, se o usuário autorizar a instalação/configuração
- React Router, se houver múltiplas páginas reais
localStoragepara progresso no MVP- PWA para instalação no celular
- Shiki ou Prism.js para destaque de código, apenas se necessário
Evite backend, autenticação e bibliotecas pesadas no MVP.
Use as capacidades disponíveis de forma intencional:
build-web-apps:frontend-app-builder: use para criar ou redesenhar a interface principal do app. Para implementação visual completa, siga o fluxo de design, implementação e verificação visual da skill.build-web-apps:frontend-testing-debugging,playwright, Chrome DevTools ou Browser MCP: use para testar layout, navegação, responsividade e erros visuais quando houver UI implementada.build-web-apps:react-best-practicesouvercel:react-best-practices: use após mudanças relevantes em componentes React/TSX.context7: use para documentação atual de React, Vite, Tailwind, React Router, PWA, TypeScript e bibliotecas.- GitHub plugin/MCP: use apenas quando a tarefa envolver issues, PRs, actions, checks, histórico remoto ou publicação no GitHub.
- Vercel plugin/MCP: use quando a tarefa envolver deploy, preview, domínio, logs ou variáveis de ambiente da Vercel.
- Figma plugin/MCP: use quando houver arquivo, link ou referência de design no Figma. Carregue a skill de Figma apropriada antes de chamar ferramentas Figma.
- Firecrawl, Exa ou Tavily: use quando a tarefa exigir pesquisa web, leitura de páginas externas ou extração de conteúdo.
pdf: use quando for necessário analisar layout ou estrutura de PDFs. Não copie conteúdo protegido.- Codex Security: use quando o usuário pedir revisão ou correção de segurança.
- Gmail e Notion: use somente se o usuário pedir explicitamente contexto dessas ferramentas.
Quando uma ferramenta MCP não estiver carregada, use tool_search para localizar a ferramenta adequada. Se não estiver disponível, explique a limitação e siga com a melhor alternativa local.
O app deve conter, em fases:
- home com continuação de estudo;
- trilha de lições;
- página de lição;
- blocos de código legíveis no celular;
- quizzes com feedback;
- desafios de "qual é a saída?";
- favoritos;
- progresso salvo localmente;
- modo claro e escuro;
- revisão rápida;
- glossário;
- instalação como PWA.
main, primeiro programa ecoutcin, entrada de dados e soma de inteiros- variáveis e memória
- tipos fundamentais
- aritmética
ife operadores relacionaiswhileforbreakecontinue- operadores lógicos
&&,||,! - funções
- passagem por valor
- referências e parâmetros por referência
- escopo de variáveis
- pilha de chamadas de função
- ponteiros básicos
- ponteiros em funções
constcom ponteiros- relação entre ponteiros e arrays
- arrays
- passagem de arrays para funções
std::stringbásicostd::stringcompletostd::vectorbásicostd::vectore STL
Cada lição deve ser curta o bastante para estudo no celular e seguir este formato:
- objetivo da lição;
- explicação curta;
- exemplo mínimo;
- explicação linha por linha;
- variação do exemplo;
- erros comuns;
- dica ou macete;
- quiz;
- desafio de saída;
- exercício prático;
- revisão rápida.
Estrutura de dados sugerida:
export type Lesson = {
id: string;
title: string;
module: string;
chapterReference?: string;
difficulty: "iniciante" | "intermediario" | "avancado";
estimatedMinutes: number;
tags: string[];
objective: string;
explanation: {
short: string;
detailed: string;
};
codeExamples: {
title: string;
code: string;
explanation: string[];
}[];
tips: string[];
commonMistakes: string[];
quiz: {
question: string;
options: string[];
correctAnswer: number;
explanation: string;
}[];
outputChallenges: {
question: string;
code: string;
answer: string;
explanation: string;
}[];
practiceExercises: {
title: string;
description: string;
starterCode?: string;
expectedConcepts: string[];
}[];
quickReview: string[];
};- Priorize C++17, salvo se o projeto indicar outra versão.
- Prefira exemplos pequenos, compiláveis e adequados para iniciantes.
- Use
std::cout,std::cin,std::stringestd::vectorcom namespace explícito nos primeiros módulos. - Evite
using namespace std;nos exemplos iniciais. Pode explicar que existe, mas prefirastd::por clareza. - Use
'\n'preferencialmente em vez destd::endl, explicandostd::endlapenas quando necessário. - Compile mentalmente os exemplos antes de adicioná-los.
- Para exemplos simples, use como referência:
g++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o main- Mobile-first é obrigatório.
- O app deve ser confortável para estudo noturno.
- Botões e áreas clicáveis devem ser adequados para toque.
- Blocos de código devem ter rolagem horizontal em telas pequenas.
- Evite páginas longas sem divisão visual.
- Não dependa de hover para funcionalidades importantes.
- Use texto claro, direto e didático, sem infantilizar.
- Preserve acessibilidade básica: contraste, foco visível, semântica e navegação por teclado quando aplicável.
Antes de alterar projetos React/Vite, verifique package.json e o lockfile.
Use os scripts existentes. Quando existirem, tente rodar:
npm run build
npm run lint
npm run testSe ainda não houver package.json, não invente comandos de build. Primeiro estruture ou crie o projeto conforme pedido.
Depois de mudanças de UI, quando houver app executável, verifique pelo menos:
- build sem erro;
- modo claro e escuro;
- responsividade básica mobile e desktop;
- navegação principal;
- progresso salvo no
localStorage; - quizzes com feedback;
- blocos de código legíveis.
- Nunca leia, crie, edite ou exponha secrets, tokens,
.env,.env.*, cookies, chaves privadas ou credenciais sem autorização explícita. - Não altere
.codex/,.agents/,.git/, caches,node_modules,dist,build,.nextou arquivos gerados sem necessidade clara. - Não rode comandos destrutivos.
- Não instale dependências novas sem explicar o motivo e confirmar que são necessárias.
- Não faça deploy, commit, push, merge ou rebase remoto sem pedido explícito.
A primeira versão do app será considerada útil quando tiver:
- Home;
- lista de lições;
- página de lição;
- modo claro e escuro;
- progresso local;
- pelo menos 3 lições completas;
- quiz simples por lição;
- desafio de saída;
- layout legível no celular.