Aplicação de tutor de inglês com IA: conversação, correção de escrita, prática de pronúncia e vocabulário com SRS (repetição espaçada).
- 🤖 Tutor de Conversa (IA): chat com correções e explicações em tempo real
- 📝 Correção de Escrita: análise gramatical com feedback detalhado
- 🎤 Pronúncia: gravação e análise da fala
- 🎯 Vocabulário (SRS): revisão espaçada para memorização eficiente
- 📊 Progresso: metas diárias, streak e trilhas personalizadas
- 🎓 Níveis CEFR (A1–C1): conteúdo adaptado ao nível do aluno
- Next.js 14 App Router com
app/(servidor por padrão) e componentes client quando necessário - Roteamento inicial (home): verificação em servidor do cookie
auth_token- Autenticado → redireciona para
/dashboard - Não autenticado → redireciona para
/landing
- Autenticado → redireciona para
- Páginas principais:
app/landing/page.tsx: landing (marketing + modal de login/registro)app/auth/page.tsx: tela dedicada para login/registroapp/dashboard/page.tsx: dashboard autenticado (placeholder inicial)
- APIs (TypeScript): em
app/api/*com validação via Zod, rate limiting in-memory e autenticação por cookie HTTP-only (auth_tokencom JWT) - Banco:
lib/db.tscom fallback de conexão (env →mongodb://mongo:27017/ailinguo→mongodb://localhost:27017/ailinguo) e índices idempotentes - Segurança: cabeçalhos seguros, CORS dinâmico por
CORS_ORIGINS, CSP ajustada em desenvolvimento, cookies HTTP-only, remoção demock-token, senhas combcrypt - Middleware:
middleware.tspara CORS (OPTIONS) e origem dinâmica - Estilos: Tailwind CSS com
app/globals.css;tailwind.config.jsescaneando*.ts,*.tsx - UI: componentes shadcn/Radix convertidos para TSX; alguns tipados,
sidebar.tsxsegue com// @ts-nochecktemporariamente - TypeScript:
tsconfig.jsoncomstrict: true,jsx: preserve,isolatedModules; tipos de domínio emlib/types.ts; env validado emlib/env.ts - Infra (opcional): Nginx como reverse proxy (gzip, headers, WebSocket, rate limit), integrado ao
docker-compose.yml
- Docker e Docker Compose (para subir tudo facilmente)
- Node.js 18+ (para desenvolvimento local)
-
Preparar ambiente
cp .env.example .env docker-compose up --build
-
Acessar
http://localhost:3000
-
Instalar dependências
yarn install
-
Configurar
.envcp .env.example .env # ajuste as variáveis conforme necessário -
Subir MongoDB (se não usar Docker)
docker run -d -p 27017:27017 --name mongo mongo:7 # ou via Homebrew (macOS) brew install mongodb/brew/mongodb-community brew services start mongodb-community -
Rodar o servidor
# porta padrão 3000; para escolher outra porta: PORT=3001 yarn dev
yarn dev– servidor de desenvolvimento (respeitaPORT)yarn build– build de produçãoyarn start– servidor de produçãoyarn lint– ESLintyarn seed– popula o banco com dados exemployarn test:e2e– testes E2E (Playwright)yarn docker:build/yarn docker:up– Docker Composeyarn docker:dev– build + upyarn typecheck– checagem de tipos (TS)
Crie o .env a partir de .env.example:
# Projeto
PROJECT_NAME=AprendendoComIA
NODE_ENV=development
# Banco
MONGODB_URI=mongodb://mongo:27017/ailinguo
DB_NAME=ailinguo
# IA
OPENAI_API_KEY=sua_chave
OPENAI_MODEL=gpt-4o-mini
OPENAI_MODEL_FALLBACK=gpt-4o
AI_TUTOR_MOCK=1
# App
NEXT_PUBLIC_BASE_URL=http://localhost:3000
# CORS
CORS_ORIGINS=*Notas:
- Em dev, a CSP permite
unsafe-evalapenas quando necessário para tooling. - CORS é dinâmico via
CORS_ORIGINSe aplicado também no Nginx (quando usado).
POST /api/auth/register– registroPOST /api/auth/login– loginGET /api/auth/me– dados do usuário autenticadoPOST /api/auth/logout– sair (limpa cookie)
POST /api/tutor– conversa/correção, validação com Zod, opcionalmente persiste turnos
GET /api/vocabulary/due– cartões devidos do usuárioPOST /api/vocabulary/review– registrar resposta (SRS)
POST /api/chat/sessions– cria sessão do chatGET /api/chat/history– histórico (quando habilitado)
app/
api/ # rotas de API (TS)
auth/page.tsx # tela de login/registro
dashboard/page.tsx # dashboard autenticado
landing/page.tsx # landing (pública)
layout.tsx # layout raiz + globals.css
page.tsx # redireciona / → /landing ou /dashboard
components/
ui/* # componentes shadcn/Radix (TSX)
lib/
db.ts, env.ts, types.ts, utils.ts
middleware.ts # CORS (OPTIONS) e origem dinâmica
docker-compose.yml, Dockerfile, nginx/* (quando habilitado)
app/globals.csscontém diretivas@tailwinde design tokens (CSS vars)tailwind.config.jsinclui*.tse*.tsxemcontent(necessário após migração TS)
npx playwright install
yarn test:e2ePorta 3000 em uso
lsof -ti:3000 | xargs kill -9
PORT=3001 yarn devFalha ao conectar no MongoDB
docker ps | grep mongo
docker-compose restart mongoVariáveis não carregadas
cp .env.example .envProjeto sob licença MIT – veja LICENSE.
- Frontend: Next.js 14, React 18/19 types, Tailwind, shadcn/ui, Framer Motion
- Backend/API: Next.js App Router (rotas de API)
- Banco: MongoDB
- IA: OpenAI
- Auth: JWT em cookie HTTP-only
- Testes: Playwright
- Deploy: Docker, Docker Compose, Nginx (opcional)