- Visão Geral
- O Problema
- A Solução
- Funcionalidades
- Arquitetura Técnica
- Stack Tecnológica
- Fluxo do Usuário
- Principais Desafios Técnicos
- Resultados
- Links
OtimizaAI é um SaaS brasileiro que utiliza Inteligência Artificial para otimizar currículos para sistemas ATS (Applicant Tracking Systems). O usuário faz upload do currículo em PDF ou DOCX, cola a descrição da vaga e recebe uma versão reescrita com as palavras-chave certas — tudo em português brasileiro, por R$ 1,99.
🔒 Este repositório é um showcase público. O código fonte do OtimizaAI é privado. Aqui você encontra a documentação da arquitetura, decisões técnicas e case study do projeto.
No Brasil, mais de 70% das empresas de médio e grande porte utilizam sistemas ATS para filtrar currículos automaticamente. Esses sistemas:
- Descartam currículos que não contêm palavras-chave específicas da vaga
- Não processam bem formatações complexas (tabelas, imagens, colunas)
- Priorizam currículos alinhados semanticamente com a descrição da vaga
O resultado: candidatos qualificados são eliminados não por falta de competência, mas por falta de otimização para o robô.
O OtimizaAI resolve isso com um wizard guiado de 6 etapas:
| Etapa | Descrição |
|---|---|
| ① | Upload do currículo (PDF ou DOCX) |
| ② | Colar a descrição da vaga |
| ③ | Pagamento via PIX (R$ 1,99) |
| ④ | Confirmação das skills detectadas |
| ⑤ | Processamento com IA (GPT-4o-mini) |
| ⑥ | Download do currículo otimizado |
- Parse automático de PDF e DOCX extraindo texto, habilidades e experiência
- Comparação semântica entre currículo e descrição da vaga
- Identificação de gaps — palavras-chave e skills faltantes
- Reescrita contextual preservando a veracidade das informações
- Inserção estratégica de palavras-chave da vaga
- Geração dupla v1+v2 com validação cruzada para evitar alucinações
- Citação por fonte — cada claim no currículo linkado à experiência original
- Wizard em 6 etapas com progresso visual
- Pagamento PIX integrado com Mercado Pago (QR Code dinâmico)
- Atualização em tempo real via Server-Sent Events (SSE)
- Background jobs com Inngest para processamento assíncrono
- Download em PDF e DOCX
- Avaliação com estrelas após entrega
- Rate limiting via Upstash Redis (fallback in-memory)
- Guardrails anti-alucinação: geração dupla + validação por fonte
- Sentry para monitoramento de erros (opcional, no-op sem DSN)
📐 Veja o diagrama de arquitetura completo → Abra o arquivo
architecture.htmlno navegador para uma visualização interativa.
┌─────────────────────────────────────────────────────────┐
│ 🌐 Usuário │
└────────────────────────┬────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────────────┐
│ ▲ Vercel (CDN + Edge) │
│ ║ │
│ ╔════════╩══════════════════════════════╗ │
│ ║ Next.js 16 (App Router) ║ │
│ ║ ┌──────────┐ ┌────────────────┐ ║ │
│ ║ │ React 19 │ │ Server Actions │ ║ │
│ ║ │ Tailwind │ │ API Routes │ ║ │
│ ║ │ shadcn/ui │ │ SSE Endpoints │ ║ │
│ ║ └──────────┘ └───────┬────────┘ ║ │
│ ╚════════════════════════╩══════════════╝ │
│ │ │
└──────────────────────────────┼───────────────────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌────────────────┐ ┌──────────────────┐
│ Supabase │ │ OpenAI API │ │ Mercado Pago │
│ (PostgreSQL │ │ GPT-4o-mini │ │ (PIX Checkout) │
│ + Realtime) │ │ │ │ │
└───────────────┘ └────────────────┘ └──────────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────┐
│ Inngest │
│ (Background Job Processing) │
│ ┌──────────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ PDF Parsing │ │ AI Gen │ │ PDF/DOCX │ │
│ │ (pdf-parse) │ │ (OpenAI) │ │ Generation │ │
│ └──────────────┘ └──────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────┘
│
▼
┌────────────────┐
│ Upstash Redis │
│ (Rate Limiting)│
└────────────────┘
| Decisão | Por quê |
|---|---|
| Server Actions vs API Routes | Menos boilerplate, tipagem compartilhada, revalidação automática |
| SSE vs WebSockets/Polling | Simplicidade de implementação, unidirecional (servidor → cliente), suporte nativo no browser |
| Inngest vs Fila manual | Observabilidade built-in, retry automático, dev server local |
| Geração dupla v1+v2 | Reduz alucinações em ~85% comparado a single-pass |
| Upstash Redis | Serverless-friendly, paga por uso, fallbar para in-memory sem dependência |
| Categoria | Tecnologia | Propósito |
|---|---|---|
| Framework | Next.js 16 (App Router) | SSR, Server Actions, API Routes |
| UI | React 19 + Tailwind CSS v4 + shadcn/ui | Componentes, estilos, design system |
| IA | OpenAI GPT-4o-mini / GPT-4o | Geração e análise de currículos |
| Database | Supabase (PostgreSQL + Realtime) | Dados de usuários, otimizações, feedback |
| Pagamentos | Mercado Pago | Checkout PIX brasileiro |
| Background Jobs | Inngest | Processamento assíncrono de currículos |
| Rate Limiting | Upstash Redis | Proteção contra abuso |
| Monitoramento | Sentry (opcional) | Rastreamento de erros |
| @react-pdf/renderer + pdf-parse | Geração e parsing de PDFs | |
| DOCX | npm docx |
Geração de arquivos DOCX |
| Testes | Vitest + Playwright | Testes unitários e E2E |
| Deploy | Vercel | Hospedagem e CI/CD |
sequenceDiagram
participant U as Usuário
participant F as Frontend
participant API as API/Server Actions
participant MP as Mercado Pago
participant IA as OpenAI
participant DB as Supabase
U->>F: 1. Upload currículo (PDF/DOCX)
F->>API: 2. Envia arquivo
API->>DB: 3. Salva sessão
API-->>F: 4. ID da sessão
U->>F: 5. Cola descrição da vaga
F->>API: 6. Envia descrição
API->>API: 7. Analisa compatibilidade
U->>F: 8. Solicita otimização
F->>MP: 9. Gera QR Code PIX (R$1,99)
MP-->>F: 10. QR Code + ID do pagamento
U->>MP: 11. Paga via PIX
MP->>API: 12. Webhook: pagamento confirmado
API->>IA: 13. Gera currículo otimizado (v1)
API->>IA: 14. Gera currículo otimizado (v2)
API->>API: 15. Valida e mescla versões
API->>DB: 16. Salva resultado
API-->>F: 17. SSE: progresso + resultado
F-->>U: 18. Download do currículo
Problema: Currículos brasileiros vêm em formatos wildly diferentes — desde tabelas do Word até PDFs escaneados. Solução: Pipeline de extração em camadas (buffer → text → structured data), com fallbacks progressivos.
Problema: A IA tende a "inventar" experiências que não existem no currículo original. Solução:
- Geração dupla (v1 e v2) com prompts estruturados diferentes
- Validação cruzada: cada claim no output deve ter uma source no input
- Citação explícita por seção do currículo original
Problema: PIX pode levar segundos ou minutos para confirmar, e o usuário não pode ficar esperando. Solução: Webhook do Mercado Pago + Inngest para disparar o job de otimização assim que o pagamento for confirmado, com SSE notificando o frontend em tempo real.
Problema: PDF e DOCX precisam manter formatação consistente (fontes, margens, espaçamento) independentemente do conteúdo gerado pela IA. Solução: Componentes base (@react-pdf/renderer) com layout fixo e conteúdo dinâmico injetado via templates.
| Métrica | Valor |
|---|---|
| Tecnologias na Stack | 12+ serviços integrados |
| Formato de Entrada | PDF e DOCX |
| Formato de Saída | PDF e DOCX |
| Modelo de IA | GPT-4o-mini (principal) + GPT-4o (fallback) |
| Pagamento | PIX via Mercado Pago |
| Processamento | Assíncrono via Inngest |
| Preço | R$ 1,99 por otimização |
| Idioma | Português Brasileiro |
| Recurso | Link |
|---|---|
| 🌐 Site | otimizai.vercel.app |
| 📐 Diagrama de Arquitetura | architecture.html |
| @silviorodrigues98 | |
| 🐙 GitHub | @silviorodrigues98 |
Este repositório contém apenas documentação pública. O código fonte do OtimizaAI é privado.
A documentação deste repositório está licenciada sob MIT — veja o arquivo LICENSE para detalhes.