O DevRoast e um app web divertido onde voce cola um trecho de codigo e recebe um "roast" com score, feedback e uma boa dose de sarcasmo.
Ambiente em producao: https://devroast-jlippertdev.vercel.app
Este projeto esta sendo construido durante o NLW-Operator da Rocketseat, acompanhando as aulas do evento e evoluindo o visual com base nos designs do Pencil.
- Permite colar codigo em um editor com visual de terminal.
- Analisa o codigo usando Gemini AI e gera roast com score, feedback detalhado e correcoes sugeridas.
- Exibe uma previa de leaderboard com os codigos mais "vergonhosos".
- Leaderboard Pagination: Navigate through roast history with Previous/Next controls
- 20 entries per page with URL-based navigation
- Scroll-to-top behavior on page change
- Empty state messages when no data available
- Accessible keyboard navigation (WCAG AAA)
- Possui uma tela de component library para evolucao da interface.
- Suporte completo a i18n (EN/PT-BR) com rotas localizadas.
- Integracao completa com Gemini AI para analise de codigo.
- Persistencia em PostgreSQL com Drizzle ORM.
- Banco de producao no Neon (Vercel sem dependencia de Docker).
- Leaderboard dinamico com top 3 na homepage e top 20 em pagina dedicada.
- Cache agressivo (1h stale/revalidate, 24h expire) para performance.
- Prioridade em fidelidade visual e componentes reutilizaveis.
- Estetica inspirada em terminal/dev tool.
- Componentes UI com padrao de composicao.
- Tokens de tema no Tailwind para manter consistencia visual.
- Animacoes de loading com efeito glitch e mensagens engraçadas rotativas durante submissão.
- Suporte completo a i18n (EN/PT-BR) com guard-rails para garantir idioma correto.
- Partial Prerender (PPR) do Next.js 16 para performance otimizada.
- Degradacao graciosa se banco PostgreSQL estiver indisponivel.
- ORM com Drizzle, PostgreSQL 16 via Docker Compose e driver
pg. - Schema em TypeScript com camelCase e conversao automatica para
snake_case. - Queries planejadas com
select,joine SQL explicito, semrelations()nativas do Drizzle. - Em producao (Vercel), recomendado usar Postgres gerenciado (ex.: Neon) via
DATABASE_URL.
- Crie o arquivo
.env.localna raiz do projeto:
DATABASE_URL=postgresql://devroast:devroast@localhost:5432/devroast- Suba o banco:
docker compose up -d- Gere e aplique as migrations:
pnpm db:generate
pnpm db:migrate- Crie um projeto no Neon e copie a connection string pooled.
- Na Vercel, em Settings -> Environment Variables, configure:
DATABASE_URL=postgresql://<user>:<password>@<neon-host>/<db>?sslmode=require&channel_binding=require
GEMINI_API_KEY=<sua-chave>
CRON_SECRET=<seu-secret>
DATA_RETENTION_DAYS=7- Rode migrations apontando para o Neon:
pnpm db:migrate- Faça deploy da
main.
pnpm db:generategera migrations com base no schema.pnpm db:migrateaplica migrations no banco.pnpm db:pushsincroniza schema diretamente.pnpm db:studioabre o Drizzle Studio.
O projeto usa cache agressivo para reduzir queries ao banco:
- Data queries: Cache de 1h (stale/revalidate) e 24h (expire)
- CodeBlock rendering: Cache de 1h com shiki syntax highlighting
- Partial Prerender: Next.js 16 PPR para rotas estaticas com dados dinamicos
- ✅ Extração das regras puras de submit para módulo dedicado (
home-roast-submit) - ✅ Orquestração do submit movida para hook dedicado (
use-home-roast-submit) - ✅ Sessão resiliente de submit em
sessionStoragepara manter estado durante remount/rotação - ✅ Componente de feedback de submit centralizado com mensagens i18n no tom DevRoast
- ✅ Ajustes de responsividade mobile (Android/iOS) no fluxo Home + Code Editor
Implementação entregue de forma incremental em duas fases internas do roadmap do projeto.
- ✅ URL-based pagination with Previous/Next controls
- ✅ Skeleton loading states for full page and homepage preview
- ✅ Empty state variants (empty database + out of bounds)
- ✅ Reduced motion support for animations
- ✅ Database fallback with graceful degradation
- ✅ WCAG AAA accessibility compliance
- ✅ Conexao de producao preparada para Neon com SSL em ambiente serverless
- ✅ Setup documentado de variaveis de ambiente para Vercel
- ✅ Migrations aplicadas no banco remoto Neon
- ✅ Dominio de producao atualizado para
devroast-jlippertdev.vercel.app
- ✅ +20 mensagens de loading em EN e +20 em PT-BR
- ✅ Rotacao de loading iniciando em piada aleatoria (nao fica sempre na primeira)
- ✅ Erros de submit do roast localizados por locale (EN/PT-BR)
- ✅ Fallback engraçado no modal quando a OG image falha
- ✅ Ajuste de middleware para nao redirecionar rota de opengraph-image