O Lume é uma plataforma profissional de candidaturas desenvolvida para ajudar candidatos a criar, gerenciar e otimizar todo o seu ecossistema de apresentação profissional (currículos de alta performance, cartas de apresentação elegantes e mensagens de e-mail personalizadas para recrutadores).
A plataforma permite estruturar informações de forma clara, validar currículos contra leitores ATS, organizar documentos por tags, e exportar currículos e cartas diretamente para PDF de alta qualidade com suporte total a múltiplos idiomas.
O projeto está implantado e pronto para uso em produção no seguinte endereço: 👉 https://lume.guibus.dev/
O Lume utiliza uma arquitetura reativa moderna em que a edição do formulário sincroniza simultaneamente o visualizador em HTML e a compilação do canvas em PDF:
graph TB
subgraph Client ["💻 Frontend Client-Side (Browser)"]
UI["🎨 Editor Form (React Hook Form + Zod)"]
Preview["👁️ Live Preview (HTML/Tailwind)"]
PDF["📄 @react-pdf/renderer (Client Canvas)"]
ATS["📊 ATS & Keyword Engine"]
end
subgraph Server ["⚡ Next.js 16 & Server Layer"]
Proxy["🛡️ Proxy Middleware (Clerk + next-intl)"]
Actions["⚡ Server Actions (resumeActions.ts)"]
end
subgraph DB ["🗄️ Camada de Banco de Dados"]
Prisma["💎 Prisma ORM"]
Postgres[("🐘 PostgreSQL")]
end
UI -->|Digitando em tempo real| Preview
UI -->|Re-renderiza Canvas| PDF
UI -->|Calcula Métricas| ATS
UI -->|Salvar / Compartilhar| Proxy
Proxy --> Actions
Actions --> Prisma
Prisma --> Postgres
| Módulo | Funcionalidades | Detalhes Técnicos |
|---|---|---|
| 📝 Editor de Currículo | • Abas categorizadas • Drag & Drop reordering • Preenchimento dinâmico |
Formulário reativo com @dnd-kit/sortable e estado gerenciado com validação Zod. |
| ✉️ Carta de Apresentação | • Editor dedicado integrado • Visualização HTML em tempo real • Mesmo estilo de cabeçalho e cor |
Geração de PDF vetorial de página única via @react-pdf/renderer com links clicáveis e padrão de nomenclatura limpo. |
| 📧 Mensagem para E-mail | • Assistente de escrita em segundos • Três opções de tom de voz • Links mailto e cópia rápida |
Integração nativa de modelos dinâmicos de texto dependentes do idioma selecionado no frontend. |
| 📄 PDF Engine | • Preview instantâneo • Download direto em Blob • Temas de cores Hex • Modelos Clássico/Moderno |
Desenvolvido com @react-pdf/renderer com suporte a múltiplos templates (1 e 2 colunas) sincronizados entre Web e PDF. |
| 🌐 Internacionalização | • Rotas /pt e /en• Versões vinculadas por groupId• Seletor dinâmico |
Suporte completo via next-intl com sincronização automática do currículo no idioma correto. |
| 🔗 Links Públicos | • Slugs curtos e amigáveis • Métricas de views e downloads• Layout público limpo |
Rotas sob /share/[id] com incrementadores assíncronos e controle de sessão por cookie. |
flowchart TD
A["📥 Dados do Currículo (ResumeData JSON)"] --> B{"📊 Validador ATS"}
A --> C{"🔍 Keyword Matcher"}
A --> D{"✍️ Analisador de Verbos"}
B --> B1["Checks de Contato, Resumo, Experiências, Skills e Word Count"]
B1 --> B2["💯 Nota ATS (0 a 100) + Dicas de Melhoria"]
C --> C1["Compara com Descrição da Vaga + Dicionário 80+ Skills"]
C1 --> C2["🎯 % de Aderência + Habilidades Ausentes"]
D --> D1["Detecta Verbos Fracos (ajudei, fiz, mexi)"]
D1 --> D2["💡 Sugere Verbos Fortes (Liderei, Desenvolvi, Otimizei)"]
O modelo E-R combina a velocidade relacional do PostgreSQL para índices de busca com a flexibilidade do JSON para o conteúdo do currículo:
erDiagram
USER ||--o{ RESUME : "cria e gerencia"
USER {
string id PK "Identificador único do Clerk"
string email UK "E-mail do usuário"
string name "Nome completo"
}
RESUME {
string id PK "UUID v4"
string title "Nome do currículo"
json content "Estrutura JSON do ResumeData"
string locale "Idioma ('pt', 'en')"
string colorTheme "Hex da cor temática"
int views "Visualizações públicas"
int downloads "Downloads de PDF"
string userId FK "ID do usuário"
string groupId "Agrupador de traduções"
string slug UK "Link amigável único"
datetime expiresAt "Data limite de expiração (Opcional)"
int maxViews "Limite de visualizações (Opcional)"
string[] sectionsOrder "Ordem de exibição das seções"
}
O projeto conta com uma cobertura completa dividida em testes unitários e testes End-to-End no navegador:
flowchart LR
subgraph Unit ["🧪 Vitest (24 Testes Unitários)"]
U1["ResumeSchema Zod (12 testes)"]
U2["ATS Validator (2 testes)"]
U3["Keyword Matcher (3 testes)"]
U4["Spellchecker (2 testes)"]
U5["LanguageSwitcher (2 testes)"]
U6["cn() Utility (3 testes)"]
end
subgraph E2E ["🎭 Playwright (15 Testes E2E)"]
E1["Clerk Test Mode Auth"]
E2["Rotas /pt e /en"]
E3["Validação de Formulários"]
E4["Inteligência ATS & Matcher"]
E5["Backup JSON & PDF Pipeline"]
end
# Rodar suíte de testes unitários com Vitest
pnpm test
# Rodar suíte de testes E2E com Playwright
pnpm test:e2e
# Interface gráfica interativa do Playwright
pnpm test:e2e:uigit clone https://github.com/gui-bus/Lume.git
cd Lume
pnpm installdocker-compose up -d
pnpm prisma migrate devpnpm devAbra http://localhost:3000 no navegador.
Para uma imersão profunda em cada módulo da aplicação, consulte a pasta /docs:
- 🚀
docs/features.md: Mapa detalhado de todas as telas e componentes. - 🏗️
docs/architecture.md: Especificação do Next.js App Router, middleware e PDF Engine. - 🗄️
docs/database.md: Modelagem física e estratégia de JSON + PostgreSQL. - ⚖️
docs/business-rules.md: Regras de pontuação ATS e dicionário de palavras-chave.




